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

时间:2018-03-29 19:22:01

标签: 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},

怎么了?

3 个答案:

答案 0 :(得分:1)

您可以使用函数reduce对所需的输出进行分组和构建。



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 result = array.reduce((a, elem) => {
  if (a[elem.brow_id]) {
    if (Array.isArray(a[elem.brow_id])) a[elem.brow_id].push(elem);
    else a[elem.brow_id] = [elem, a[elem.brow_id]];
  } else a[elem.brow_id] = elem; 
  
  return a;
}, {});

console.log(result);

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




使用forEach的方法并使用修复程序检查已添加的元素到新对象。



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) {
  if (newarray[elem.brow_id]) {
    if (Array.isArray(newarray[elem.brow_id])) newarray[elem.brow_id].push(elem);
    else newarray[elem.brow_id] = [elem, newarray[elem.brow_id]];
  } else newarray[elem.brow_id] = elem;  
});

console.log(newarray);

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




答案 1 :(得分:1)

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

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; }

答案 2 :(得分:0)

使用Array.forEach()进行分组:



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 result = {};

array.forEach(function(o) {
  var key = o['brow_id'];
  
  result[key] = key in result ? [].concat(result[key], o) : o;
});

console.log(result);