首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中推送key数组上的重复key数据

在javascript中推送key数组上的重复key数据
EN

Stack Overflow用户
提问于 2016-09-21 01:56:07
回答 1查看 588关注 0票数 0

我有这个数据结构。我已经使用了underscorejs,但是找不到像下面这样的结构。

代码语言:javascript
复制
var data = [{"5+":2},{"3-5":0},{"1-3":1},{"0.5":0},{"<30":0},{"5+":1},{"3-5":1},{"1-3":0},{"0.5":0},{"<30":0},{"5+":3},{"3-5":0},{"1-3":3},{"0.5":0},{"<30":0}];
var groupArr = [];
##loop through the data##
data.forEach(function(item){
  ##find the keys ##
  var keys = Object.keys(item);
  var obj = {};   
  obj[keys] = [];
  ##push the data to object keys array##
  obj[keys].push(item[keys])   
  groupArr.push(obj)
})

通过使用这个数据结构,我想要像这样的结构

代码语言:javascript
复制
[{"5+":[2,1,3]},{"3-5":[0,1,0]},{"1-3":[1,0,,3]},{"0.5":[0,0,0]},{"<30":[0,0,0]}]

由于我已经尝试了所有的方法,但找不到解决方案,任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-09-21 02:21:42

第一部分将对象列表转换为单个对象,其中键是对象列表中的每个唯一键,每个键的值作为数组连接:

代码语言:javascript
复制
{
  "5+": [2,1,3],
  "3-5": [0,1,0]
  ...
}

由于这不是您想要的格式,因此第二部分通过循环遍历每个键并从它创建一个新对象,将该对象转换为一个对象列表。

代码语言:javascript
复制
var data = [{"5+":2},{"3-5":0},{"1-3":1},{"0.5":0},{"<30":0},{"5+":1},{"3-5":1},{"1-3":0},{"0.5":0},{"<30":0},{"5+":3},{"3-5":0},{"1-3":3},{"0.5":0},{"<30":0}];

// create object with all the values joined together in lists.
var map = data
  .reduce(function (map, obj)  {
    var key = Object.keys(obj)[0];
    // checks if the key allready exits in the new object. 
    // If it does we push a new value into the array,
    // otherwise we create a new property with a list with one value.
    map[key] ?
      map[key].push(obj[key]):
      map[key] = [obj[key]];
    return map;
  }, {});

// convert above result to a list with objects.
var newFormat = Object.keys(map)
  .map(function (key) {
    var obj = {};
    obj[key] = map[key];
    return obj;
  })

console.log(newFormat)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39600751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档