You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何动态提取多嵌套数组相同索引元素至新数组?

动态获取嵌套数组中相同索引元素并重组新数组

原嵌套数组:

[
  [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);

说明

  1. 首先通过Math.max(...arr.map(subArr => subArr.length))获取最长子数组的长度,这样能遍历到所有可能的索引位置。
  2. 对每个索引,用arr.map(subArr => subArr[index])获取所有子数组该索引的元素,再用filter去掉undefined(比如第一个子数组只有7个元素,索引7、8时会返回undefined,过滤后只保留存在的元素)。
  3. 最终得到的groupedResult就是按相同索引分组的新数组,比如第一个元素是[1, {Id:42258}, {Address_GetListCurrentResult:'street1'}, {PersonalInfo_GetCurrentResult:'info1'}],对应所有子数组的索引0元素。

内容的提问来源于stack exchange,提问作者Keymaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:37:13