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

遍历嵌套数组并按索引分组对象的实现求助

解决数组转换问题:按键重新分组嵌套数组

我来帮你搞定这个数组转换的问题!看起来你已经搭好了初始的遍历框架,但还缺了按键收集对象的核心逻辑,咱们一步步来实现你要的目标格式:

思路分析

你的原数组是按行分组的(每个子数组对应一组包含a/b/c/d的对象),而目标是按键分组(每个子数组对应同一个键的所有对象)。核心步骤是:

  1. 先确定所有需要处理的键的顺序(这里是a、b、c、d,从第一个完整的子数组就能提取到)
  2. 针对每个键,遍历原数组的所有子数组,收集包含该键的对象
  3. 将每个键对应的对象数组组合成最终结果

完整实现代码

(function() {
  var arr = [ 
    [{ a:"a" }, { b:"b" }, { c:"c" }, { d:"d" }], 
    [{ a:"a" }, { b:"b" }], 
    [{ a:"a" }, { b:"b" }, { c:"c" }], 
    [{ a:"a" }] 
  ];

  // 1. 提取所有目标键(从第一个包含完整键的子数组获取)
  const targetKeys = arr[0].map(item => Object.keys(item)[0]);
  
  // 2. 按键收集对应的对象
  const transformedArr = targetKeys.map(key => {
    return arr.reduce((collectedItems, subArr) => {
      // 在当前子数组中查找含当前键的对象
      const matchedItem = subArr.find(item => Object.keys(item)[0] === key);
      // 如果找到就加入收集数组
      if (matchedItem) {
        collectedItems.push(matchedItem);
      }
      return collectedItems;
    }, []);
  });

  console.log(transformedArr);
  // 输出结果:
  // [
  //   [{ a:"a" }, { a:"a" }, { a:"a" }, { a:"a" }],
  //   [{ b:"b" }, { b:"b" }, { b:"b" }],
  //   [{ c:"c" }, { c:"c" }],
  //   [{ d:"d" }]
  // ]
})();

代码细节解释

  • 提取目标键:因为第一个子数组包含了所有可能的键(a、b、c、d),我们用Object.keys(item)[0]取出每个单键对象的唯一键,得到顺序为['a','b','c','d']的键数组。
  • 按键收集对象:
    • 用map遍历每个目标键,为每个键生成对应的对象数组
    • 用reduce遍历原数组的所有子数组,对每个子数组用find查找是否存在当前键的对象,存在就加入收集数组
    • 最终每个键对应的收集数组,就是目标格式里的子数组

这样就完美实现了你需要的数组转换啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:58:52