javascript - 循环遍历数组并分配新数组的键

标签 javascript arrays grouping

我正在尝试创建一个新数组,其键是旧数组的索引

var array = [
          {"tom": "red", "part":"green", "brow_id":45},
          {"tom": "red", "part":"yellow", "brow_id":1},
          {"tom": "red", "part":"yellow", "brow_id":2},
          {"tom": "maroon", "part":"cyan", "brow_id":45}
           ];
var newarray = {};

array.forEach(function(elem) {
        newarray[elem.brow_id] = elem;
                    });

新组成的数组是这样的

         45: {"tom": "red", "part":"green", "brow_id":45},
         1:  {"tom": "red", "part":"yellow", "brow_id":1},
         2:  {"tom": "red", "part":"yellow", "brow_id":2},

我希望它包含旧数组的所有 id,如下所示

        45: [{"tom": "red", "part":"green", "brow_id":45},{"tom": "maroon", "part":"yellow", "brow_id":45}]
         1:  {"tom": "red", "part":"yellow", "brow_id":1},
         2:  {"tom": "red", "part":"yellow", "brow_id":2},

出了什么问题?

最佳答案

您可以检查是否给定了属性并分配元素,否则检查数组,如果没有则创建数组。稍后推送该元素。

var array = [{ tom: "red", part: "green", brow_id: 45 }, { tom: "red", part: "yellow", brow_id: 1 }, { tom: "red", part: "yellow", brow_id: 2 }, { tom: "maroon", part: "cyan", brow_id: 45 }],
    object = {};

array.forEach(function(elem) {
      if (!object[elem.brow_id]) {
          object[elem.brow_id] = elem;
          return;
      }
      if (!Array.isArray(object[elem.brow_id])) {
          object[elem.brow_id] = [object[elem.brow_id]];
      }
      object[elem.brow_id].push(elem);
});

console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 循环遍历数组并分配新数组的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49563617/

相关文章:

Javascript:在不记得最后一场比赛的情况下在正则表达式中反向引用

java - 填充对象数组

javascript - $.each 传递值给函数

python - 对连续整数进行分组并允许间隔为 1

javascript - MomentJS 设置时区

javascript - 将数组中的两个对象与变量进行比较以显示第三个对象

python - 根据python中的字典分组删除键值对

javascript - JQuery - 移动 Div/行

c# - 将 C# 转换为客户端 Javascript

javascript - 使用装饰器添加 Angular 指令