关于js数组常用方法的剖析
数组也是对象数据类型,也是由键值对组成的
1、以数组作为索引(属性名),索引从0开始递增
2、有一个length属性存储的是数组长度
数组中常用的方法
按照四个维度记忆:
1、方法的作用
2、方法的参数
3、方法的返回值
4、原有数组是否改变
push
作用:向数组末尾追加新的内容
参数:追加的内容(可以是一个,也可以是多个)
返回值:新增后数组的长度
原有数组改变
pop
作用:删除数组最后一项
参数:无
返回:被删除的那一项内容
原有数组改变
shift
作用:删除数组中的第一项
参数:无
返回:被删除的那一项内容
原有数组改变【基于shift删除数组中的第一项,第一项被删除后,后面的每一项的索引都要向前减1(往前提前一位)】
unshift
作用:向数组开始位置追加新内容
参数:要新增的内容
返回:新增后数组的长度
原有数组改变
splice
基于splice可以对数组进行很多的操作:删除指定位置的内容、像数组指定位置增加内容、还可以修改指定位置的信息
删除:ary.splice(n,m)
从索引n开始,删除m个内容,把删除的部分以一个新数组返回,原有数组改变
【如果不指定m,或者删除的个数大于最大长度,都是删除到数组的末尾】
清空数组:ary.splice(0)
新增:ary.splice(n,0,x,....)
从索引n开始删除零项(没删除),把X或者更多需要插入的内容存放到数组中索引N的**“前面"**
修改:ary.splice(n,m,x,...)
修改原理就是把原有内容删除掉,然后用新的内容替换这部分信息即可
需求扩展
1、删除数组最后一项,你有几种办法?
ary.pop()
ary.splice(ary.length-1)
ary.length--
delete.ary[ary.length-1]【不建议delete删除数组最后一项,虽然内容没有了,但是数组的length长度没有改变】
2、向数组末尾追加新的内容,你有几种方法?
ary.splice(ary.length,0,...)
ary.push(100)
ary[ary.length]=100
slice
作用:在一个数组中,按照条件查找出其中的部分内容
参数:两个参数(n/m),从索引n开始,找到索引m处,但是不包含m
返回:以一个新数组存储查找的内容
原有数组不会变
【
ary.slice(2)如果不写m,则查找到数组末尾
ary.slice()&ary.slice(0)实现数组的克隆:克隆一个新的数组出来,和原有数组内容一样,但不是相同的堆内存空间,两个数组是不相等独立的
ary.slice(-3,-1)支持负数索引,负数运算规则:数组总长度+负数作索引
】
concat
作用:实现多个数组(或者值)的拼接
参数:数组或者值
返回:拼接后的新数组
原有数组不变
toString
作用:把数组转换为字符串
参数:无
返回:数字组中每一项用逗号分隔的字符串
原有数组不变
join
作用:和toString类似,也是把数组转换为字符串,但是我们可以设置变为字符串后,每一项之间的连接符
参数:指定的连接符
返回:字符串
原有数组不变
基于join我们可以实现数组中每一项求和的功能
1、基于join,使用+作为分隔符,先把数组变为每一项相加的字符串
2、基于eval,把字符串变为Js表达式执行,得到的结果就是数组中每一行项累加的和
reverse
作用:把数组倒过来排列
参数:无
返回:排列后的新数组
原有数组改变
sort
作用:给数组排序
参数:无/函数
返回:排序后的新数组
原有数组改变
sort在不传递参数的情况下,只能处理10以内数字排序
真实项目中,基于sort排序,我们都需要传递参数
var ary=[12,1,213,4,43,5,86,8]
ary.sort(function(a,b)){
return a-b;//升序
return b-a;//降序
}
indexOf/lastIndexOf
这两个方法不兼容IE低版本浏览器(6~8)
作用:检测当前值再数组中第一次或者最后一次出现位置的索引
参数:要检测的值
返回:索引
原有数组不变
基于indexOf检测,如果数组中有这一项,返回一个大于等于0的索引
如果没有这一项,返回的索引为-1
验证数组中是否包含某一项
if(ary.indexOf(100)>-1){
//=>ary包含100这一项
}
Array.prototype