扁平化数组的方法多种多样,如用reduce和concat递归方式:
const flatInReduce = arr => {
return arr.reduce((acc, cur) => {
return acc.concat((Array.isArray(cur) ? flatInReduce(cur) : cur));
}, []);
}
flat为js数组的方法,用于扁平化数组,有一个参数用于指定要展开的层级,默认为Infinity
,
即展开为一维数组。
const newArray = arr.flat([depth]);
这里应用循环和递归方式模拟实现flat方法:
const myflat = (arr = [], deep = 1) => {
const stack = [...arr];
if (typeof deep !== 'number' && deep !== Infinity) {
throw new Error('deep arguments must be an typeof number or infinity!');
}
const flatten = [];
while (stack.length) {
const next = stack.shift();
if (Array.isArray(next) && deep >= 1) {
flatten.push(...myflat(next, deep - 1));
} else {
flatten.push(next);
}
}
return flatten;
}
一千个人有一千个哈莫雷特,有更多实现方法欢迎在评论区实现哈。