
-
entries、values、keys
entries返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。values只包含值,keys只包含键
var arr = ["a", "b", "c"];
var iterator = arr.entries();
for (let e of iterator) {
console.log(e);
}
// [0, "a"]
// [1, "b"]
// [2, "c"]
-
flat、flatMap
flat: 按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
array.flat([depth])
depth: 指定要提取嵌套数组的结构深度,默认值为1
var arr = [1, 2, 3, [4, 5, 6, [7, 8, 9, [10, 11]]]];
var arrNew = arr.flat(2); // 原数组不变,返回新数组[1,2,3,4,5,6,7,8,9,[10,11]]
flat会移除数组中的空项。
flatMap:首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与map连着深度值为1的flat几乎相同,但flatMap通常在合并成一种方法的效率稍微高一些。
arr.flatMap(function callback(currentValue[, index[, array]]){}[, thisArg])
callback: 可以生成一个新数组中的元素的函数,可以传入三个参数:
- currentValue:当前正在数组中处理的元素
- index: 可选,数组中正在处理的当前元素的索引
- array: 可选,被调用的map数组
thisArag: 可选,执行callback函数时使用的this值
var arr1 = [1, 2, 3, 4];
arr1.map(x => [x * 2]); // [[2], [4], [6], [8]]
arr1.flatMap(x => [x * 2]); // [2, 4, 6, 8]
-
[Symbol.iterator]
Array.prototype.values 是 Array.prototype[Symbol.iterator] 的默认实现。
array[Symbol.iterator]()
var arr = ['a', 'b', 'c', 'd', 'e'];
var eArr = arr[Symbol.iterator]();
for (let letter of eArr) {
console.log(letter); // a b c d e
}
var arr = ['a', 'b', 'c', 'd', 'e'];
var eArr = arr[Symbol.iterator]();
console.log(eArr.next().value); // a
console.log(eArr.next().value); // b
console.log(eArr.next().value); // c
console.log(eArr.next().value); // d
console.log(eArr.next().value); // e
-
reduce、reduceRight
reduce: 对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
array.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
callback: 执行数组中的每个值(如果没有提供initialValue则第一个值除外)的函数,包含四个参数:
- accumulator: 累计器累计回调的返回值
- currentValue: 数组正在处理的元素
- index: 可选,数组正在处理的元素的索引,如果提供了initialValue,则起始索引号为0,否则从1开始
- array: 调用reduce的数组
initialValue: 作为第一次调用callback函数时的第一个参数(accumulator)的初始值
如果数组为空且没有提供initialValue,会抛出TypeError。
var maxCallback = ( acc, cur ) => Math.max( acc.x, cur.x );
var maxCallback2 = ( max, cur ) => Math.max( max, cur );
// reduce() 没有初始值
[ { x: 2 }, { x: 22 }, { x: 42 } ].reduce( maxCallback ); // NaN
[ { x: 2 }, { x: 22 } ].reduce( maxCallback ); // 22
[ { x: 2 } ].reduce( maxCallback ); // { x: 2 }
[ ].reduce( maxCallback ); // TypeError
// map/reduce; 这是更好的方案,即使传入空数组或更大数组也可正常执行
[ { x: 22 }, { x: 42 } ].map( el => el.x )
.reduce( maxCallback2, -Infinity ); // 42
reduceRight: 与reduce类似,区别在于它是从右到左。
-
copyWithin
从数组的指定位置拷贝元素到数组的另一个指定位置中
array.copyWithin(target, start, end)
target: 复制到指定目标索引位置
start: 元素复制的起始位置
end:可选。停止复制的索引位置,默认为array.length,如果为负数,则倒数
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.copyWithin(2, 0); // ["Banana", "Orange", "Banana", "Orange"]
网友评论