JavaScript如何使扁平数组匹配指定嵌套数组的结构?
问题分析
你的代码存在两个核心错误:
- 索引引用错误:内层赋值时写了
array[0][k].push(array2[j]),这里错误引用了外层第一个子数组array[0],实际应该是当前遍历到的第k个子数组array[k] - 没有维护array2的读取偏移量:每次内层循环都从下标0开始读取array2的元素,会重复读取前面的内容,无法按顺序匹配后续子数组的元素需求
正确实现
可以用「偏移指针+遍历映射」的方案实现,逻辑简单易读,且不会修改原有array2的值:
// 维护array2的读取指针,初始从0位开始读 let arr2Pointer = 0; const newArray = array1.map(subArr => { const currentSub = []; for (let i = 0; i < subArr.length; i++) { currentSub.push(array2[arr2Pointer]); arr2Pointer++; } return currentSub; })
如果需要更简洁的写法,可以用数组slice方法直接截取对应长度的片段:
let index = 0; const newArray = array1.map(subArr => array2.slice(index, index += subArr.length));
两种实现最终输出的结果都和你预期的一致:
[["Banana","Orange","Apple"],["Grape"],["Pineapple"],["Raspberry","Pear"]]
内容的提问来源于stack exchange,提问作者Ajay Ubhi
相关产品推荐
相关产品推荐

