js flat 实现
实现数组扁平化的方法
使用递归方法遍历数组,将嵌套数组展开为一维数组。递归检查每个元素是否为数组,如果是则继续展开,否则将元素加入结果数组。
function flatten(arr) {
let result = [];
for (let item of arr) {
if (Array.isArray(item)) {
result.push(...flatten(item));
} else {
result.push(item);
}
}
return result;
}
使用reduce实现扁平化
利用数组的reduce方法累积处理每个元素,遇到数组元素时递归调用扁平化函数。
function flatten(arr) {
return arr.reduce((acc, val) =>
acc.concat(Array.isArray(val) ? flatten(val) : val),
[]);
}
指定深度的扁平化
通过depth参数控制扁平化层级,只展开指定层级的嵌套数组。
function flatten(arr, depth = 1) {
return depth > 0
? arr.reduce(
(acc, val) =>
acc.concat(Array.isArray(val) ? flatten(val, depth - 1) : val),
[]
)
: arr.slice();
}
使用堆栈的非递归实现
采用堆栈数据结构实现非递归的扁平化算法,避免递归可能导致的调用栈溢出问题。
function flatten(arr) {
const stack = [...arr];
const result = [];
while (stack.length) {
const next = stack.pop();
if (Array.isArray(next)) {
stack.push(...next);
} else {
result.push(next);
}
}
return result.reverse();
}
ES2019原生flat方法
现代JavaScript已内置数组扁平化方法,可直接调用实现不同深度的扁平化需求。

// 完全扁平化
const flattened = arr.flat(Infinity);
// 扁平化一层
const flattened = arr.flat();
// 扁平化两层
const flattened = arr.flat(2);






