如何在JavaScript中提取多维数组数字且不使用多层循环?
扁平化嵌套数组(无需多层循环)
当然可以,不用写多层嵌套循环也能实现数组扁平化,下面是几种实用方法:
1. 用ES6原生flat()方法
这是最简洁的方案,flat()方法可以直接将嵌套数组扁平化,传入参数Infinity就能处理任意深度的嵌套:
const nestedArr = [1, 2, [3, 4, [5, 6, [7, 8, [9]]]], 10]; const flatArr = nestedArr.flat(Infinity); console.log(flatArr); // 输出: [1,2,3,4,5,6,7,8,9,10]
2. 递归+forEach实现
通过递归遍历数组元素,遇到子数组就递归处理,遇到普通元素直接收集,全程只有单层遍历:
function flatten(arr) { const result = []; arr.forEach(item => { if (Array.isArray(item)) { // 递归处理子数组,合并结果 result.push(...flatten(item)); } else { result.push(item); } }); return result; } const nestedArr = [1, 2, [3, 4, [5, 6, [7, 8, [9]]]], 10]; console.log(flatten(nestedArr)); // 输出: [1,2,3,4,5,6,7,8,9,10]
3. 递归+reduce实现
用reduce来累加结果,逻辑和上面类似,写法更紧凑:
const flatten = arr => arr.reduce((acc, curr) => { return acc.concat(Array.isArray(curr) ? flatten(curr) : curr); }, []); const nestedArr = [1, 2, [3, 4, [5, 6, [7, 8, [9]]]], 10]; console.log(flatten(nestedArr)); // 输出: [1,2,3,4,5,6,7,8,9,10]
这些方法都没有手动编写多层嵌套循环,而是通过递归或者原生API来处理任意深度的嵌套数组。
内容的提问来源于stack exchange,提问作者Pooja Shingala
相关产品推荐
相关产品推荐

