题目:数组扁平化
示例
输入:
[[1, 2, 2],[3, 4, 5, 5],[6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10]
输出:
[1,2,2,3,4,5,5,6,7,8,9,11,12,12,13,14,10]
答案
方法一:利用 flat 函数
let arr = let arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
let arr = arr.flat(Infinity);
console(arr);
方法二:利用 toString 函数
let arr = let arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
arr = arr.toString().split(",").map((e) => Number(e));
console.log(arr);
方法三:利用 JSON.stringfy 函数
let arr = let arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
arr = JSON.stringify(arr)
.replace(/\[|\]/g, "")
.split(",")
.map((e) => Number(e));
console.log(arr);
方法四:利用 cancat 函数
let arr = let arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
while (arr.some((item) => Array.isArray(item))) {
arr = [].concat(...arr);
}
console.log(arr);
方法五:利用递归
let arr = let arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
Array.prototype.flat = function myFlat() {
let result = [];
let fn = (arr) => {
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
if (Array.isArray(arr[i])) {
fn(item);
continue;
}
result.push(item);
}
};
fn(this);
return result;
};
console.log(arr.flat());
方法六:reduce+递归
const flatten = (arr, deep = 1) => {
return arr.reduce((cur, next) => {
return Array.isArray(next) && deep > 1
? [...cur, ...flatten(next, deep - 1)]
: [...cur, next];
}, []);
};