如何将所有具有相同键的值分组到数组中

时间:2018-08-10 17:01:13

标签: javascript arrays json

首先,对不起,如果您发现问题令人困惑。 基本上,我有一个这样的对象:

[{"6":6.5},{"4":4.2},{"6":6.3}]

我想做的是删除重复的键,但保留其中的值,并将它们全部推入一个唯一的键(作为数组)。像这样:

[{"6":[6.5, 6.3]}, {"4": 4.2}]

有人可以提出解决方案吗?

1 个答案:

答案 0 :(得分:0)

.reduce()是您想要的:

var data = [{"6":6.5},{"4":4.2},{"6":6.3}];

var res = data.reduce((rv, obj) => {
  var key = Object.keys(obj)[0];
  
  rv[key] = rv[key] || [];
  rv[key].push(obj[key]);
  
  return rv;
}, {});


console.log(res);

注意::此操作始终以数组格式返回数据(即使有一个值)。如果您要查找指定的确切格式,则只需添加更多逻辑,如下所示(尽管我不推荐这种方法,因为它会增加更多的复杂性。)

var data = [{"6":6.5},{"4":4.2},{"6":6.3}];

var res = data.reduce((rv, obj) => {
  var key = Object.keys(obj)[0];
  
  if (Array.isArray(rv[key])) { // Already is an array
    rv[key].push(obj[key]);
  } else if (rv[key] !== undefined) { // Has a value. Convert to array
    rv[key] = [rv[key], obj[key]];
  } else { // Haven't seen this key yet. Set the value
    rv[key] = obj[key];
  }
  
  return rv;
}, {});


console.log(res);