ES6中数组增加了很多新的方法,但是先回顾下之前ES5中的数组的方法。
ES5中的方法
Array.prototype.forEach
遍历一下数组中的每个选项Array.prototype.map, Array.prototype.filter: 返回一个新的数组。
两者的区别是:map返回的是,由原数组中的每个元素调用一个方法后返回的新数组;filter是通过指定函数测试,然后创建了个新的数组;Array.prototype.some,Array.prototype.every: 返回的是Boolean值
some只要有一个符号就返回;every只要有一个不符合就返回。Array.prototype.reduce, Array.prototype.reduceRight:相当于一个迭代的过程,返回最终的结果。可以传4个参数:previous, current, index, array.
indexOf, lastIndexOf
ES6中新增的方法
Array.from()
这个方法是将对象转为真正的数组,这个对象有两种类型:类似数组的对象和可遍历的对象(如ES6中的Set和Map)
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
// ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
常用的场景
常见的类似数组对象是NodeList集合和arguments
Array.from('hello');//['h','e','l','l','o']
let namesSet = new Set(['a','b'])
Array.from(namesSet);//['a','b']
Array.from([1,2,3])//[1,2,3]
但有一点,扩展运算符(...)也可以将某些数据结构转为数组
var args = [...arguments];
[...document.querySelectorAll('div')]
其实扩展运算符背后调用的是遍历器接口(Symbol.iterator),如果一个对象没有部署成这个接口,就无法转换。Array.from方法则还支持类似的数组对象,但是这种类似数组对象,必须要有length属性,如果没有,就不能转换。
Array.from还可以接受第二个参数,作用类似与数组的map方法,用于对每个元素进行处理。
Array.of()
这个方式是用于将一组值,转换为数组。
Array.of(3,11,8)//[3,11,8]
这个方法的主要目的,是弥补数组构造函数Array()的不足
new Array(3)//[undefined*3]
Array.of可以替代Array()或者new Array()
Array.of()//[]
Array.of(undefined)//[undefined]
Array.of(1)//[1]
Array.of(1,2)//[1,2]
copyWidthin()
将制定位置的成员复制到其他位置,然后返回当前数组,就是使用这个方法,修改当前数组。
Array.prototype.copyWithin(target, start = 0, end = this.length)
target(必选):从该位置开始替换数据
start(可选):从该位置开始读取数据,默认为0,如果是负数,表示倒数。
end(可选):到该位置前停止读取数据,默认等于数组长度。如果是负数,表示倒数。
[1,2,3,4,5].copyWidthin(0, 3)//[4,5,3,4,5]
[1,2,3,4,5].copyWidthin(0,3,4)//[3,2,3,4,5]
[1,2,3,4,5].copyWidthin(0,-2,-1)//[4,2,3,4,5]
find(), findIndex()
find(): 用于找到第一个符合条件的数组成员
findIndex(): 返回第一个符合条件的数组成员位置
fill()
这个方式使用一个定值,填充一个数组
['a','b','c'].fill(7)//[7,7,7]
entries() keys() values()
for (let index of ['a', 'b'].keys()) {
console.log(index);
}
// 0
// 1
for (let elem of ['a', 'b'].values()) {
console.log(elem);
}
// 'a'
// 'b'
for (let [index, elem] of ['a', 'b'].entries()) {
console.log(index, elem);
}
// 0 "a"
// 1 "b"
includes()
这个方法表示某个数组是否包含给定的值
数组的空位,数组的空位和undefined不是同一个概念
0 in [undefined, undefined, undefined] // true
0 in [, , ,] // false
空位处理
ES5中
forEach,filter,every,some会跳过空位
map会跳过空位,但会保留这个值
join(),toString()会将空位视为undefined,而undefined和null会被处理成空字符串.
ES6会将空位转为undefined.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。