企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 数组扩展 > 1.扩展运算符 2.Array.from() 3.Array.of() 4.数组实例的 copyWithin() 5.数组实例的 find() 和 findIndex() 6.数组实例的 fill() 7.数组实例的 entries(),keys() 和 values() 8.数组实例的 includes() 9.数组实例的 flat(),flatMap() ### 扩展运算符 ~~~ console.log(...[1, 2, 3]) // 1 2 3 console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5 [...document.querySelectorAll('div')] ~~~ ### Array.from ~~~ 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'] ~~~ ### Array.of() ~~~ Array.of(3, 11, 8) // [3,11,8] Array.of(3) // [3] Array.of(3).length // 1 ~~~ ### 数组实例的 copyWithin() ~~~ // 将3号位复制到0号位 [1, 2, 3, 4, 5].copyWithin(0, 3, 4) // [4, 2, 3, 4, 5] // -2相当于3号位,-1相当于4号位 [1, 2, 3, 4, 5].copyWithin(0, -2, -1) // [4, 2, 3, 4, 5] // 将3号位复制到0号位 [].copyWithin.call({length: 5, 3: 1}, 0, 3) // {0: 1, 3: 1, length: 5} ~~~ ### 数组实例的 find() 和 findIndex() ~~~ [1, 4, -5, 10].find((n) => n < 0) ~~~ ~~~ [1, 5, 10, 15].findIndex(function(value, index, arr) { return value > 9; }) // 2 ~~~ ### 数组实例的 fill() ~~~ ['a', 'b', 'c'].fill(7) // [7, 7, 7] new Array(3).fill(7) // [7, 7, 7] ['a', 'b', 'c'].fill(7, 1, 2) // ['a', 7, 'c'] ~~~ ~~~ let arr = new Array(3).fill({name: "Mike"}); arr[0].name = "Ben"; arr // [{name: "Ben"}, {name: "Ben"}, {name: "Ben"}] let arr = new Array(3).fill([]); arr[0].push(5); arr // [[5], [5], [5]] ~~~ ### 数组实例的 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() ~~~ [1, 2, 3].includes(2) // true [1, 2, 3].includes(4) // false [1, 2, NaN].includes(NaN) // true [1, 2, 3].includes(3, 3); // false [1, 2, 3].includes(3, -1); // true ~~~ ### 数组实例的 flat(),flatMap() flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。 ~~~ [1, 2, [3, 4]].flat() [1, 2, [3, [4, 5]]].flat() // [1, 2, 3, [4, 5]] [1, 2, [3, [4, 5]]].flat(2) // [1, 2, 3, 4, 5] ~~~ 如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数 ~~~ [1, [2, [3]]].flat(Infinity) // [1, 2, 3] ~~~ 如果原数组有空位,flat()方法会跳过空位 ~~~ [1, 2, , 4, 5].flat() // [1, 2, 4, 5] ~~~ flatMap()方法对原数组的每个成员执行一个函数(相当于执行Array.prototype.map()),然后对返回值组成的数组执行flat()方法。该方法返回一个新数组,不改变原数组。 ~~~ [2, 3, 4].flatMap((x) => [x, x * 2]) // [2, 4, 3, 6, 4, 8] ~~~ ~~~ [1, 2, 3, 4].flatMap(x => [[x * 2]]) // [[2], [4], [6], [8]] ~~~ ### 课后习题 1.下面的代码运行结果是 ~~~ var s = [1,2,3]; var f = [...s,1,2,3]; console.log(f); ~~~ ~~~ var s = [1, 2, 3, 4, 5].copyWithin(0, -3, -1) console.log(s); ~~~ ~~~ var s = ['a', 'b', 'c', 'd'].fill(1, 1, 2); console.log(s); ~~~ ~~~ for (let index of ['a', 'b', 'c'].keys()) { console.log(index); } ~~~ ~~~ var s = [2, 3, 4]; var l = s.flatMap((x) => [x, x - 2]); console.log(s); console.log(l); ~~~