关于JS截取字符串以及截取数组项的几种常见方法解析

JavaScript019

关于JS截取字符串以及截取数组项的几种常见方法解析,第1张

关于js数组的用法有很多,下面主要针对一些简单的操作,比如合并,反转,添加删除等简单的操作总结一下。

关于js数组的用法有很多,下面主要针对一些简单的操作,比如合并,反转,添加删除等简单的操作总结一下。

第一:读取数组 for循环

方法如下:

var ay=[1,"sdsd","sdsd"]for (var i=0i<ay.lengthi++) {

console.log("index:"+i+" "+ay[i]) //index:0 1 index:1 sdsd index:2 sdsd

}

第二:合并数组 concat

方法如下:

var arr1=['w','e','s']

var arr2=['e','y','u']var arr3=arr1.concat(arr2)console.log(arr3) //['w','e','s''e','y','u']第三:数组变为字符串格式 join

方法如下:

var arr1=['w','e','s']

var arr4=arr1.join()console.log(arr4) //w,e,s

第四:删除最后一个元素,针对老数组是删除最后一个,针对新数组是返回最后一个 pop

var arr6=["d","s","t"]var arr7=arr6.pop()console.log(arr6) // ["d","s"]console.log(arr7)// t

第五:添加最后一个元素,针对老数组最后一个元素后面添加一个元素,新数组返回元素个数 push

var arr8=["i","u","t"]

var arr9=arr8.push("k")

console.log(arr8)//["i","u","t","k"]

console.log(arr9)// 4

第六:shift() 和pop()一样,不同的是操作的是开头删除的元素shift();具体操作不在展示第七:unshiift()和push一样,不同的是操作的是开头添加的元素unshift();具体操作不再展示

第八:反转数组 reverse

方法如下:

var arr1=['w','e','s']

var arr10=arr1.reverse()

console.log(arr10) //['s','e','w']

第九:数组排序 sort a-b正向b-a 反向

正向

var arr11=[3,1,5,8,28]var arr12=arr11.sort(function (a,b) {return a-b})console.log(arr12) //[1,3,5,8,28]

反向

var arr13=arr11.sort(function (a,b) {return b-a})console.log(arr13) //[28,8,5,3,1]

第十:数组截取 数组截取的方法主要有slice 和splice,另外说到截取我这里随便也把字符串截取带上,字符串截取的方法主要有substr 和substring

(1)slice 使用方法arr.slice(m,n)其中arr为数组,m,n为两个参数,意思是从已有数组中返回选定的元素,截取位置均为下标,其中m必须,为起始位置,可以为负值,n为结束位置(截取位置并不包含)。

示例如下:

①只有起起始值,并且为正,默认的从起始位置一直到整个数组结束,起始下标从0开始

var arr=[2,3,5,6,8,9]var arr1=arr.slice(1)console.log(arr) // [2,3,5,6,8,9] 老数组是没有变化的,下面不在列举,都是一样的console.log(arr1) //[3,5,6,8,9] 只有起始参数,并且为正值,返回新数组从下标1开始截取

②只有起始值,并且为负,默认的是从起始位置一直到整个数组结束,此处没有起始值,数组的最后一个下标是-1,比如此例,如果从-6开始取,必定是整个数组

var arr=[2,3,5,6,8,9]var arr1=arr.slice(-1)console.log(arr1) //[9] 只有起始参数,并且为负值,从数组尾部截取元素

③有起始值和结束值,并且为正,此处需注意下标是从小到大,比如你(3,1)肯定是取不到值的,另外截取的下标个数并不包含最后一个下标

var arr=[2,3,5,6,8,9]var arr1=arr.slice(1,4)console.log(arr1) //[3,5,6] 此时是从下标1开始到下标4,但是需要注意的是并不包含下标4,准确的说是1-3的下标

④有起始值和结束值,并且为负,此处需注意下秒也是从小到大,同理,比如(-1,-6)也是肯定取不到值的,另外截取的下标个数也并不包含最后一个下标

var arr=[2,3,5,6,8,9]var arr1=arr.slice(-6,-1)console.log(arr1) //[2,3,5,6,8]

⑤有起始值和结束值,并且正负都有

负值到0

var arr=[2,3,5,6,8,9]var arr1=arr.slice(-1,0)

//刚刚都看到了,数组下标都是从小到大的,所以说如果正负都有的情况下,理论上应该可以取值的,比如这个例子,-1为9的小标,0为2的下标,所以取值应该为 [9],但是结果并不是这样的console.log(arr1) //[ ] 从这里可以看出他的结果是为空的,所以从负值到0结果是取不到的

负值到正直

var arr=[2,3,5,6,8,9]

var arr1=arr.slice(-1,2)

//那从负值到正值呢,同样也是取不到值的

console.log(arr1) //[ ]

正直到负值

var arr=[2,3,5,6,8,9]

var arr1=arr.slice(2,-1)

//那从正直到负值,这个理论上是取不到的,但是看下结果

console.log(arr1) //[ 5,6,8] 从结果可以看出是可以取的 原理是2的下标为5,-1的下标为9,不包含结束位置下标

总结:这个方法看着可能会麻烦些(也可能被我写的麻烦啦),比如正到负等,不知道大家都是怎么操作,我一般用这个取值都是只截取正的,所以这个实际操作还是非常简单的。

(2)splice 像数组中添加或者删除元素 arr.splice(m,n,index,index1,...,indexx) m是起始位置,n是删除元素的个数,index是要添加的元素,在不添加元素的前提下,只有第一个参数是必须的,后面两个都不是必须的,在需要添加元素的情况下,三个元素都是必须的,此方法和slice是不一样的,这个返回的是被删除的元素

示例如下:

只删除不添加

注意看此例,是(1,2)删除两个,如果是(1,0),则表示删除零个,也就是不删除的意思,如果只有一个参数则表示从这里开始删除,比如是(1)则为[2],当然这个也是可以取负值,但是这个和slice是不一样的,只能起始位置取负值,因为删除的个数不可能为负值,slice可以取(2,-1),这个就截然不同啦,但是刚刚也说啦,slice是不可以起始位置取负值,结束位置取正的,但是这个是可以的,比如(-1,0)则表示从-1开始删除零个,结果为[2,3,5,6,8,9],(-6,2),结果为[5,6,8,9],另外这个删除的第二个值如果写的过大,也只是删除从本下标到最后一个,比如(2,78)为[2,3]

var arr=[2,3,5,6,8,9]var arr1=arr.splice(1,2)console.log(arr) // [2,6,8,9] 注意看此处才是我们要的数组,从下标1开始删除删除两个console.log(arr1) //[3,5] 此处是我们删除掉的数组

删除加添加 具体的和上面的差不多,主要添加了添加元素的效果,这个也可以添加多个元素

var arr=[2,3,5,6,8,9]var arr1=arr.splice(1,2,"il")console.log(arr) //[2,"li",6,8,9] console.log(arr1) //[3,5]

总结:此方法用的时候,一般也都是只取正值

(3)substr 这个是字符串的用法 用法arr.substr(m,n) m必选也可以负值 n选填,注意看这个并不是结束为止而是截取的个数

示例如下:

只有一个参数 默认从此下标开始,取后面所有的

正值

var arr="sdhgfhf"var arr1=arr.substr(1)console.log(arr)// "sdhgfhf"这个是不变的,下面不再列举console.log(arr1)// "dhgfhf" 从下标1开始取后面所有的

负值

var arr="sdhgfhf"var arr1=arr.substr(-2)console.log(arr1)// "hf" 从下标-2开始取后面所有的

两个参数,从第一个下标开始,截取到下标2的长度

var arr="sdhgfhf"var arr1=arr.substr(1,3)console.log(arr1)// "dhg" 从下标1开始取后面所有的 同理如果为负值,比如(-6,3)则为"hjf"后面的始终为长度

总结:此方法需注意不要和数组的混淆,这个是截取长度的

(4)substring 用法arr.substring(m,n) 两个参数,m必须,起始位置 ,n选填,截取下标的结束位置,此用法和上面slice有点类似,但是需要注意的是此方法是不支持负值的

示例如下:

只有一个参数

var arr="sdhgfhf"var arr1=arr.substring(1)console.log(arr1)//"dhgfhf"从下标1开始取后面所有的

两个参数

var arr="sdhgfhf"var arr1=arr.substring(1,3)console.log(arr1)// "dh"从下标1开始截取到下标3,但是不包含3

总结:此方法不支持负值,只针对下标来截取的

可以用Array中自带的方法:

arrayObj.shift( )

shift 方法可移除数组中的第一个元素并返回该元素。

例如:

var ary=[1,2,3,4]

var a=ary.shift()//a=1ary=[2,3,4]

arrayObj.slice(start, [end])

slice 方法返回一个 Array 对象,其中包含了 arrayObj 的指定部分。

参数:start,截取数组开始下标。end截止的下标,但不包括end元素

例如:

var ary=[1,2,3,4]

var newary=ary.slice(0, 2);//newary=[1,2],不包括下标2 所对应的元素3。

数组的创建方式

1.字面量的形式: var arr=[1,2,3]

1.构造函数: var arr1=new Array()//不常用

Array构造函数有一个很大的缺陷,就是不同的参数,会导致它的行为不一致。

1.单个数值作为参数,参数表示数组的元素个数

可以看到,Array作为构造函数,行为很不一致。因此,不建议使用它生成新数组,直接使用数组字面量是更好的做法。

push/pop/unshift/shift//增加、删除元素 (数组的方法,所以使用时应调用

数组名.方法名())

arr. slice/splice//截取元素

arr.slice() 原数组不发生改变

无参数时,返回原数组,相当于数组的复制。

一个参数时,从参数作为下标的元素截取,至数组结束。

二个参数时,从第一个参数作为下标(索引)的元素开始截取,到第二个参数作为下标的元素结束,但不包括第二个参数作为下标的函数。 (起始元素包含,结尾元素不包含)

多个参数时,前两个参数起效,后边的参数无效。

arr.splice()原数组改变

无参数时,返回空数组。

一个参数时,从参数作为下标的元素截取,至数组结束。

二个参数时,从第一个参数作为下标(索引)的元素开始截取,即表示截取的起始位置,第二个参数表示截取的元素个数。

多个参数时,前两个参数起效,后边的参数从原数组的截取起始位置开始填充,填充到原数组。

reverse/sort//改变元素位置

arr.reverse()//数组翻转(元素位置颠倒)

arr.sort()从小到大排序,但遵循的是字符串的按位比较规则,所以排序结果容易出现异常。

join()//不改变原数组

join() 以指定参数作为连接符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。

concat()//拼接数组 不改变原数组

ES5新增数组操作方法

indexOf (item) 返回元素在数组中对应的索引值,找不到的话,返回-1,用以测试元素是否存在于数组中

forEach(function(item,index))遍历数组,没有返回值

map(function(item,index))遍历数组,存在返回值

filter(function(item)) {return item>2} 返回大于2的元素

some返回布尔值,条件部分成立|| arr.some(function(item){return item>2} )

every返回布尔值,条件全部成立&& arr.every(function(item){return item>2} )

reduce (对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。)arr.reduce(function(a,b){return a+b})

toString()和toLocaleString()

功能:将数组的每个元素转化为字符串,并且输出用逗号分隔的字符串列表。功能类似join();

参数:无

输出:字符串

indexOf()和lastIndexOf()

功能:搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引或者如果没有找到就返回-1;lastIndexOf为反向搜索。

参数:元素的值,起点索引(可选)

输出:索引值或-1

Array.from()

功能:将两类对象转为真正的数组:类似数组的对象和可遍历的对象

参数:待转换的对象,第二个参数可选,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

输出:数组

Array.of()

功能:将一组值,转换为数组。

参数:数组元素

输出:数组

copyWithin()

功能:在当前数组内部,将指定位置的成员复制到其他位置,返回变化后的数组。

参数:索引(从该位置开始替换数据);索引(从该位置开始读取数据,默认为0,负值表示倒数);索引(到该位置前停止读取,默认为最大索引)

输出:返回当前替换后的数组。

注意:改变了当前数组

find()和findIndex()

功能:找到第一个符合条件的数组成员。

参数:回调函数,所有数组成员依次执行该函数,直到找到第一个返回值为true的成员。回调函数可以接受三个参数,依次为值,位置,原数组。

输出:find()返回找到的成员;findIndex()返回成员的位置。

fill()

功能:使用给定的值,填充一个数组。

参数:第一个参数为待填充的值,第二和第三参数可选,分别表示填充的起始和结束位置(不包括)。

输出:填充后的数组

entries()、keys()、values()

功能:用于遍历数组,可以用for…of循环进行遍历。区别是keys()是对键名的遍历、values是对键值的遍历、entries()是对键值对的遍历。

参数:无

输出:遍历器对象

includes()

功能:表示某个数组是否包含给定的值

参数:第一个参数必选(待检查的给定值),第二个参数可选,表示搜索的起始位置,默认为0,负数表示倒数的位置。

输出:一个布尔值。

注意:和indexOf的区别,indexOf进行了运算符的强比对,会导致对NaN误判。