如何动态重组多个等长数组的同索引元素
实现多等长数组的索引元素重组
你需要将数量不固定的多个等长数组,按索引把对应位置的元素整合为新数组,以下是几种简洁的JavaScript实现方案:
基础实现(利用map嵌套)
直接基于第一个数组的长度遍历索引,收集每个子数组对应位置的元素:
const arrayOfarray = [ ['a','b','c','d','e','f'], ['h','i','j','k','l','m'], ]; const expectedResult = arrayOfarray[0].map((_, index) => arrayOfarray.map(subArr => subArr[index]) ); console.log(expectedResult); // 输出:[['a','h'],['b','i'],['c','j'],['d','k'],['e','l'],['f','m']]
封装成可复用函数(含空输入判断)
如果需要处理空输入场景,封装成函数更实用:
function transposeEqualLengthArrays(arrays) { // 处理空数组输入 if (!arrays.length) return []; // 按索引转置 return arrays[0].map((_, index) => arrays.map(subArr => subArr[index])); } // 测试用例 const testArray = [['x','y'],['p','q'],['m','n']]; console.log(transposeEqualLengthArrays(testArray)); // 输出:[['x','p','m'],['y','q','n']]
用Array.from实现(不依赖第一个数组的map)
如果不想依赖第一个数组的map方法,可以用Array.from创建目标长度的数组再处理:
const arrayOfarray = [ ['a','b','c','d','e','f'], ['h','i','j','k','l','m'], ]; const expectedResult = Array.from( { length: arrayOfarray[0].length }, (_, index) => arrayOfarray.map(subArr => subArr[index]) );
注意事项
以上方案均假设所有子数组长度一致,若存在长度不同的情况,可根据需求调整(比如取最短子数组的长度,或为缺失位置补undefined)。
内容的提问来源于stack exchange,提问作者Nicoprrt
相关产品推荐
相关产品推荐

