在实际开发中,数组是最常见的,数组方法也很多,很多时候容易搞混淆,比如什么情况下返回新数组,什么时候改变当前数组,现在我们来做个总结,方便以后查阅
1.判断是否为数组 Array.isArray
2.将数组参数传入数组 Array.of
3.将类数组转化为数组,比如
需要注意length属性必须要,不然会转化为[]
相当于 console.log([].slice.call(obj)),如果是字符串,则会返回一个个字符组成的数组
Array.from(obj,x=x+1)
注意:不会改变原对象
可以利用其特性数组去重 Array.from(new Set(['a','b','c','a']))
4.Array.prototype可以在数组原型上面添加方法,然后所有的数组都能调用改方法
二改变当前数组,不生成新的数组
1.原型链上的方法----copyWithin方法3个参数,(该数组开始替换的位置,替换值开始位置,结束位置)结束位置不填默认为直到该数组结束位置。
2.原型链上的方法----fill方法,3个参数,(需要替换成的值,替换的开始位置,替换的结束位置)
3.原型链上的方法---pop方法,无参数,删除最后一个参数
4.原型链上的方法---push方法,给数组末尾添加一个元素或者多个元素(注释里面是arr的值)
5.原型链上的方法--reverse,将数组颠倒,第一位排到最后一位,最后一位排到第一位
6.原型链上的方法---shift,将数组第一个元素删除,返回被删除的元素
7.原型链上的方法---sort,按照unicode码进行排序,可以传入函数作为参数
8.原型链上的方法---splice,splice(index,howmany,item1,item2,...,itemx)
参数详解 index--- 必需,整数,规定添加/删除项目的位置,负数从数组结尾规定位置
howmany 可选,要删除的数量,0为不删除
itemx 项目中要添加的元素
9.原型链上的方法---unshift()将一个或多个元素添加到数组的最前面
三,不改变当前数组,生成新的数组
1.原型链上的concat,用于合并2个或多个数组
2.原型链上的方法---indexOf(),用来判断该元素是否在数组里面,返回值为数组中该元素第一次出现时的下标,如果不存在就是-1
语法 array.indexOf(searchElement,fromIndex)
参数,searchElement被查找的元素(必选),fromIndex开始查找的位置(可选)
3.原型链上的方法---includes includes(searchElement,fromIndex)
返回为true / false
4.原型链上的方法lastIndexOf(searchElement,fromIndex)
fromIndex为从0开始到下标为fromIndex的元素里面找到最后一个值为searchElement的下标
5.原型链上的方法join------将数组或者类数组转换为字符串,空数组转为空字符串
join(str) str参数可选,不选默认用,隔开
6.原型链上的方法---slice,浅拷贝,slice(begin,end) 不会改变原数组
这里面有一个坑,如果数组里面有引用类型,当改变原数组中引用类型里面的值时,浅拷贝的数组会跟着变,当前拷贝的数组里面引用类型改变时,原数组也会跟着变。
7.toString方法,可以将数组转换为用逗号隔开的字符串,说join方法类似,不过不能像join一样定义隔开符
注意:当数组和字符相加时,会自动调用toString方法
8原型链上的方法---toLocalString,将数组里面的各个元素转换为字符串,并且用逗号隔开,可传参数
四,遍历数组(不改变原数组)
1.forEach arr.forEach((val,index,arr)=>{},thisValue)
这种情况需要注意下哈
当val===22时,由于shift改变了数组,导致数组第一项去掉,变成了新的数组[55,77,223],这时第一项已经遍历了,因此就从第二项77开始遍历。
2.every遍历,返回值2个true/false,需要数组中的每一个元素都满足该条件,才会返回true
3.some遍历,返回值true/false,需要数组某一个满足条件就能返回true
4.filter,将原数组通过某种过滤条件选出符合条件的元素组成一个新的数组
5.map,将原数组通过某个规则,将每个元素生成新的元素,然后组成个新的数组
6.reduce reduce(callback(total,currentvalue,currentIndex,arr),initialvalue)
total,必需,初始值或者上一次回调返回的值,如果initialvalue存在,那么就是初始值
initialvalue,不存在就是数组的第一个元素
currentvalue,如果是initialvalue不存在就是下标为1的元素,如果有,则是下标为0的元素
currentIndex,同上
arr,可选 调用reduce方法的数组
7.reduceRight 是从右边开始相加
8.find() findIndex() 一个是返回该条件 的值,一个是返回该条件的下标 不符合就是undefind -1
参数与map,every等参数相同
9.扩展es6
1.keys() 对键名的遍历
2.values()对键名的遍历
3.entries()对键值对的遍历
ok,数组就先总结到这里啦,一般项目中够用啦