Array内置属性和方法整理

2020-07-03  本文已影响0人  梦行乌托邦
img1
var arr = ["a", "b", "c"];
var iterator = arr.entries();
for (let e of iterator) {
    console.log(e);
}
// [0, "a"] 
// [1, "b"] 
// [2, "c"]

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]

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

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类似,区别在于它是从右到左。

array.copyWithin(target, start, end)
target: 复制到指定目标索引位置
start: 元素复制的起始位置
end:可选。停止复制的索引位置,默认为array.length,如果为负数,则倒数

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.copyWithin(2, 0);  // ["Banana", "Orange", "Banana", "Orange"]

\color{red}{ Array上有bind、apply、call、caller、arguments这些方法, }
\color{red}{ 但没有使用场景?这个在我们了解了Function、Object之后看是否有答案 }

上一篇 下一篇

猜你喜欢

热点阅读