1. 使用concat()
和递归
function flatten(arr) {return arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), []);
}let multiDimArray = [[1, 2, [3]], 4];
let flatArray = flatten(multiDimArray);
console.log(flatArray); // 输出: [1, 2, 3, 4]
2. Array.prototype.flat()
ES2019引入了flat()
方法,可以直接展平数组。
let multiDimArray = [[1, 2, [3]], 4];
let flatArray = multiDimArray.flat(Infinity); // 深度展平
console.log(flatArray); // 输出: [1, 2, 3, 4]
3. Array.prototype.reduce()
和 concat()
let multiDimArray = [[1, 2], [3, 4]];
let flatArray = multiDimArray.reduce((acc, val) => acc.concat(val), []);
console.log(flatArray); // 输出: [1, 2, 3, 4]
4. 扩展运算符和递归
function flatten(arr) {return arr.reduce((acc, val) => Array.isArray(val) ? [...acc, ...flatten(val)] : [...acc, val], []);
}let multiDimArray = [[1, 2, [3]], 4];
let flatArray = flatten(multiDimArray);
console.log(flatArray); // 输出: [1, 2, 3, 4]
5. while
循环和push()
let multiDimArray = [[1, 2, [3]], 4];
let flatArray = [];
let stack = [...multiDimArray];while (stack.length) {let next = stack.pop();if (Array.isArray(next)) {stack.push(...next);} else {flatArray.push(next);}
}
flatArray.reverse(); // 因为是反向添加的,所以需要反转
console.log(flatArray); // 输出: [1, 2, 3, 4]
6. Array.prototype.forEach()
和 push()
let multiDimArray = [[1, 2], [3, 4]];
let flatArray = [];
multiDimArray.forEach(subArr => subArr.forEach(item => flatArray.push(item)));
console.log(flatArray); // 输出: [1, 2, 3, 4]
7. for...of
循环和Array.isArray()
let multiDimArray = [[1, 2, [3]], 4];
let flatArray = [];
for (const subArr of multiDimArray) {if (Array.isArray(subArr)) {for (const item of subArr) {flatArray.push(item);}} else {flatArray.push(subArr);}
}
console.log(flatArray); // 输出: [1, 2, 3, 4]
8. 使用Array.from()
和映射函数
let multiDimArray = [[1, 2], [3, 4]];
let flatArray = Array.from(multiDimArray, (...subArr) => subArr).flat();
console.log(flatArray); // 输出: [1, 2, 3, 4]
9. Generator
函数和展开运算符
function* flattenGenerator(arr) {for (const item of arr) {if (Array.isArray(item)) {yield* flattenGenerator(item);} else {yield item;}}
}let multiDimArray = [[1, 2, [3]], 4];
let flatArray = [...flattenGenerator(multiDimArray)];
console.log(flatArray); // 输出: [1, 2, 3, 4]
10. String.split()
和Number()
这种方法适用于数字数组,且不推荐用于复杂场景,因为会涉及类型转换,可能有精度损失。
let multiDimArray = [[1, 2], [3, 4]];
let flatArray = multiDimArray.join(',').split(',').map(Number);
console.log(flatArray); // 输出: [1, 2, 3, 4]