数组扁平化是指将多维嵌套的数组转换为一维数组。
1. 使用递归
递归是一种常用的数组扁平化方式,它通过遍历数组的每个元素来判断是否为数组,如果是数组,则继续递归处理;如果是非数组元素,则将其添加到结果数组中。
function flattenArray(arr) {
let result = [];
arr.forEach(item => {
if (Array.isArray(item)) {
result = result.concat(flattenArray(item));
} else {
result.push(item);
}
});
return result;
}
2. 使用扩展运算符(...)
function flattenArray(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
3. 使用Array.flat
方法
Array.flat
方法是ES2019引入的新方法,它可以用于将嵌套的数组扁平化为指定的层数。
const arr = [1, [2, [3, [4, 5]]]];
const flatResult = arr.flat(Infinity);
console.log(flatResult); // 输出 [1, 2, 3, 4, 5]
上面的代码中,通过调用arr.flat(Infinity)
将arr
数组扁平化为一维数组。参数Infinity
表示递归地扁平化数组,直到没有嵌套数组。默认值为 1
4. 使用Array.reduce
方法
Array.reduce
方法也可以用于数组的扁平化操作。可以通过将数组逐个展开并追加到累加器中来实现。
function flattenArray(arr) {
return arr.reduce((accumulator, currentValue) => {
return accumulator.concat(Array.isArray(currentValue) ? flattenArray(currentValue) : currentValue);
}, []);
}
var flat = function (arr, n) {
while(n){arr = [].concat(...arr);n--;}
return arr;
};