如何动态提取多嵌套数组相同索引元素至新数组?
动态获取嵌套数组中相同索引元素并重组新数组
原嵌套数组:
[ [1, 2, 3, 4, 5, 6, 7], [{ Id: 42258 }, { Id: 42259 }, { Id: 42260 }, { Id: 42261 }, { Id: 42262 }, { Id: 42263 }, { Id: 42264 }, { Id: 42265 }, { Id: 42266 }], [{ Address_GetListCurrentResult: 'street1' }, { Address_GetListCurrentResult: 'street2' }, { Address_GetListCurrentResult: 'street3' }, { Address_GetListCurrentResult: 'street4' }, { Address_GetListCurrentResult: 'street5' }, { Address_GetListCurrentResult: 'street6' }, { Address_GetListCurrentResult: 'street7' }, { Address_GetListCurrentResult: 'street8' }, { Address_GetListCurrentResult: 'street9' }], [{ PersonalInfo_GetCurrentResult: 'info1' }, { PersonalInfo_GetCurrentResult: 'info2' }, { PersonalInfo_GetCurrentResult: 'info3' }, { PersonalInfo_GetCurrentResult: 'info4' }, { PersonalInfo_GetCurrentResult: 'info5' }, { PersonalInfo_GetCurrentResult: 'info6' }, { PersonalInfo_GetCurrentResult: 'info7' }, { PersonalInfo_GetCurrentResult: 'info8' }, { PersonalInfo_GetCurrentResult: 'info9' }] ]
问题
如何动态获取所有嵌套数组中相同索引的元素并将其存入新数组?我尝试过for和forEach循环,但无法遍历所有元素,当前代码示例:
const nmbrsEmployee = [ [1, 2, 3, 4, 5, 6, 7], [{ Id: 42258 }, { Id: 42259 }, { Id: 42260 }, { Id: 42261 }, { Id: 42262 }, { Id: 42263 }, { Id: 42264 }, { Id: 42265 }, { Id: 42266 }], [{ Address_GetListCurrentResult: 'street1' }, { Address_GetListCurrentResult: 'street2' }, { Address_GetListCurrentResult: 'street3' }, { Address_GetListCurrentResult: 'street4' }, { Address_GetListCurrentResult: 'street5' }, { Address_GetListCurrentResult: 'street6' }, { Address_GetListCurrentResult: 'street7' }, { Address_GetListCurrentResult: 'street8' }, { Address_GetListCurrentResult: 'street9' }], [{ PersonalInfo_GetCurrentResult: 'info1' }, { PersonalInfo_GetCurrentResult: 'info2' }, { PersonalInfo_GetCurrentResult: 'info3' }, { PersonalInfo_GetCurrentResult: 'info4' }, { PersonalInfo_GetCurrentResult: 'info5' }, { PersonalInfo_GetCurrentResult: 'info6' }, { PersonalInfo_GetCurrentResult: 'info7' }, { PersonalInfo_GetCurrentResult: 'info8' }, { PersonalInfo_GetCurrentResult: 'info9' }] ] let objectsAtPosition = [] function testArray() { for (let i = 0; i < nmbrsEmployee.length; i++) { const subArray = nmbrsEmployee[i]; const objectAtIndex = subArray[1]; objectsAtPosition.push(objectAtIndex); console.log('objectsAtPosition', objectsAtPosition); } }
解决方案
你的代码逻辑是遍历外层数组,每次取子数组的第二个元素(索引1),这和需求不符。要实现按相同索引分组,需要先确定最长子数组的长度,然后遍历每个索引,收集所有子数组对应索引的元素:
const nmbrsEmployee = [ [1, 2, 3, 4, 5, 6, 7], [{ Id: 42258 }, { Id: 42259 }, { Id: 42260 }, { Id: 42261 }, { Id: 42262 }, { Id: 42263 }, { Id: 42264 }, { Id: 42265 }, { Id: 42266 }], [{ Address_GetListCurrentResult: 'street1' }, { Address_GetListCurrentResult: 'street2' }, { Address_GetListCurrentResult: 'street3' }, { Address_GetListCurrentResult: 'street4' }, { Address_GetListCurrentResult: 'street5' }, { Address_GetListCurrentResult: 'street6' }, { Address_GetListCurrentResult: 'street7' }, { Address_GetListCurrentResult: 'street8' }, { Address_GetListCurrentResult: 'street9' }], [{ PersonalInfo_GetCurrentResult: 'info1' }, { PersonalInfo_GetCurrentResult: 'info2' }, { PersonalInfo_GetCurrentResult: 'info3' }, { PersonalInfo_GetCurrentResult: 'info4' }, { PersonalInfo_GetCurrentResult: 'info5' }, { PersonalInfo_GetCurrentResult: 'info6' }, { PersonalInfo_GetCurrentResult: 'info7' }, { PersonalInfo_GetCurrentResult: 'info8' }, { PersonalInfo_GetCurrentResult: 'info9' }] ]; function groupElementsByIndex(arr) { // 获取所有子数组中最长的长度,确保覆盖所有索引 const maxSubArrayLength = Math.max(...arr.map(subArr => subArr.length)); const groupedResult = []; // 遍历每个索引位置 for (let index = 0; index < maxSubArrayLength; index++) { // 收集每个子数组中当前索引的元素,过滤不存在的元素(避免undefined) const currentGroup = arr.map(subArr => subArr[index]).filter(item => item !== undefined); groupedResult.push(currentGroup); } return groupedResult; } // 调用函数并输出结果 const result = groupElementsByIndex(nmbrsEmployee); console.log(result);
说明
- 首先通过
Math.max(...arr.map(subArr => subArr.length))获取最长子数组的长度,这样能遍历到所有可能的索引位置。 - 对每个索引,用
arr.map(subArr => subArr[index])获取所有子数组该索引的元素,再用filter去掉undefined(比如第一个子数组只有7个元素,索引7、8时会返回undefined,过滤后只保留存在的元素)。 - 最终得到的
groupedResult就是按相同索引分组的新数组,比如第一个元素是[1, {Id:42258}, {Address_GetListCurrentResult:'street1'}, {PersonalInfo_GetCurrentResult:'info1'}],对应所有子数组的索引0元素。
内容的提问来源于stack exchange,提问作者Keymaster
相关产品推荐
相关产品推荐

