如何将普通数组与含子数组的数组合并为同类型元素一维数组
实现方案
方法1:使用ES6内置flat方法(推荐)
- 核心逻辑:调用数组
flat()方法展开嵌套数组,传入Infinity可支持任意深度的嵌套结构展开,再通过扩展运算符或者concat方法和第一个数组合并。 - 代码示例:
// 展开data2所有嵌套子数组 const flatData2 = data2.flat(Infinity) // 合并两个数组得到最终一维数组 const finalData = [...data1, ...flatData2] // 也可以合并为一行写法 const finalData = [...data1, ...data2.flat(Infinity)]
- 注意:如果明确data2的嵌套层级最多为N层,可以把
Infinity替换为对应的数字N,比如只有1层嵌套就写flat(1),性能更好。
方法2:兼容低版本环境的手动实现
如果运行环境不支持ES6的flat()方法,可以用递归+reduce手动实现数组扁平化:
// 自定义扁平化函数 function flattenArray(arr) { return arr.reduce((acc, cur) => { // 如果当前元素是数组就递归展开,否则直接加入结果 return acc.concat(Array.isArray(cur) ? flattenArray(cur) : cur) }, []) } const finalData = data1.concat(flattenArray(data2))
内容的提问来源于stack exchange,提问作者Borislav Stefanov
相关产品推荐
相关产品推荐

