在javascript中按键阵列上的重复键数据

时间:2016-09-20 17:56:07

标签: javascript node.js underscore.js

我有这个数据结构。我使用了underscorejs,但无法找到方法,就像下面的结构

[{"5+":[2,1,3]},{"3-5":[0,1,0]},{"1-3":[1,0,,3]},{"0.5":[0,0,0]},{"<30":[0,0,0]}]

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

$(".foo").css("min-height", function(){ 
    return $(this).height();
});

由于我已经尝试过所有但无法找到解决方案的任何帮助,我们将非常感激。

1 个答案:

答案 0 :(得分:0)

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

{
  "5+": [2,1,3],
  "3-5": [0,1,0]
  ...
}

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

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)