如何在JavaScript中解构多层嵌套数组并转为一维数组?
三层嵌套数组转一维数组的实现方案
方法1:递归实现(支持任意层级嵌套)
递归是处理嵌套数组最通用的方案,不管数组嵌套多少层都能适配:
function flattenArray(arr) { let result = []; arr.forEach(item => { if (Array.isArray(item)) { result = result.concat(flattenArray(item)); } else { result.push(item); } }); return result; } // 测试示例 const nestedArr = [[[{name: "john"}],[{name: "jack"}]],[[{name: "joe"}],[{name: "bob"}]]]; const flatArr = flattenArray(nestedArr); console.log(flatArr); // 输出:[{name: "john"},{name: "jack"},{name: "joe"},{name: "bob"}]
方法2:使用ES6的Array.prototype.flat()(简洁高效)
ES6新增的flat()方法可以直接扁平化数组,传入层级参数即可,这里嵌套3层所以传3:
const nestedArr = [[[{name: "john"}],[{name: "jack"}]],[[{name: "joe"}],[{name: "bob"}]]]; const flatArr = nestedArr.flat(3); console.log(flatArr);
如果不确定数组的嵌套层级,也可以传入Infinity,自动展开所有层级:
const flatArr = nestedArr.flat(Infinity);
方法3:reduce结合递归(函数式风格)
用reduce简化递归逻辑,写法更紧凑:
const flattenArray = arr => arr.reduce((acc, curr) => { return acc.concat(Array.isArray(curr) ? flattenArray(curr) : curr); }, []); // 测试示例 const nestedArr = [[[{name: "john"}],[{name: "jack"}]],[[{name: "joe"}],[{name: "bob"}]]]; console.log(flattenArray(nestedArr));
内容的提问来源于stack exchange,提问作者Aidenhsy
相关产品推荐
相关产品推荐

