实现一个嵌套数组的flat方法,展开深度为可根据参数设定展开深度,效果如下:
var arr = [1,2,[3,4],[5,[6,7]]]
var flatArr = flat(arr,1)
console.log(flatArr)
展开结果:[1,2,3,4,5,[6,7]]
我知道Array对象的flat方法,如果要自己封装flat方法要怎么做呢
实现一个嵌套数组的flat方法,展开深度为可根据参数设定展开深度,效果如下:
var arr = [1,2,[3,4],[5,[6,7]]]
var flatArr = flat(arr,1)
console.log(flatArr)
展开结果:[1,2,3,4,5,[6,7]]
我知道Array对象的flat方法,如果要自己封装flat方法要怎么做呢
参考 MDN Array.prototype.flat(),使用 flat 或 reduce
// 使用 reduce、concat 和递归无限反嵌套多层嵌套的数组
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
function flattenDeep(arr1) {
return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), []);
}
flattenDeep(arr1);
// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
// 不使用递归,使用 stack 无限反嵌套多层嵌套数组
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
function flatten(input) {
const stack = [...input];
const res = [];
while (stack.length) {
// 使用 pop 从 stack 中取出并移除值
const next = stack.pop();
if (Array.isArray(next)) {
// 使用 push 送回内层数组中的元素,不会改动原始输入 original input
stack.push(...next);
} else {
res.push(next);
}
}
// 使用 reverse 恢复原数组的顺序
return res.reverse();
}
flatten(arr1);// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答837 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
是写出这个方法的大致逻辑嘛?