学习链接
269个JavaScript工具函数,助你提升工作效率(新)
数组扁平化
flat
和 flatMap
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]
[1, 2, [3, [4, 5]]].flat()
// [1, 2, 3, [4, 5]]
[1, 2, [3, [4, 5]]].flat(2)
// [1, 2, 3, 4, 5]
[1, [2, [3]]].flat(Infinity)
// [1, 2, 3]
// 相当于 [[2, 4], [3, 6], [4, 8]].flat()
[2, 3, 4].flatMap((x) => [x, x * 2])
// [2, 4, 3, 6, 4, 8]
// 相当于 [[[2]], [[4]], [[6]], [[8]]].flat()
[1, 2, 3, 4].flatMap(x => [[x * 2]])
// [[2], [4], [6], [8]]
不用 flat
和 flatMap
function flatten(arr) {
while(arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
Array.prototype.myFlat = function (depth = 1) {
if (depth < 1) return [...this];
return this.map(val => {
return [].concat(Array.isArray(val) ? val.myFlat(depth - 1) : val);
});
}
Array.prototype.myFlat = function (depth = 1) {
if (depth < 1) return this.slice();
return this.reduce((arr, val) => {
return arr.concat(Array.isArray(val) ? val.myFlat(depth - 1) : val);
}, []);
}
function* flatten(array) {
for (const item of array) {
if (Array.isArray(item)) {
yield* flatten(item);
continue;
}
yield item;
}
}
const arr = [1, 2, [3, 4, [5, 6]]];
const flattened = [...flatten(arr)];