将JavaScript数组与多个子值组合(Node.js / NVD3)

时间:2017-11-10 03:57:49

标签: javascript arrays json node.js nvd3.js

我试图设置一个Node.js API,它将JSON数据发送到客户端,以便在NVD3图表中使用。该图表以下列格式接受JSON输入:

[  
   {  
      "key”:”KEY NAME“,
      "values":[  
         [  
            1138683600000,
            14.212410956029
         ],
         [  
            1141102800000,
            13.973193618249
         ]
      ]
   },
   {  
      "key”:”KEY NAME“,
      "values":[  
         [  
            1138683600000,
            7.1590087090398
         ],
         [  
            1141102800000,
            7.1297210970108
         ]
      ]
   }
]

但是,我的Node程序当前以这种格式输出JSON:

[  
   {  
      "key”:”SAME KEY NAME”,
      "values":[  
         1510148301000,
         34
      ]
   },
   {  
      "key”:”SAME KEY NAME”,
      "values":[  
         1509626301000,
         55
      ]
   },
   {  
      "key”:”SAME KEY NAME“,
      "values":[  
         1509539901000,
         62
      ]
   },
   {  
      "key”:”DIFFERENT KEY NAME“,
      "values":[
         1509453501000,  
         58
      ]
   }
]

我想结合任何"键"索引与其他索引相同并合并"值"彼此以指定的格式。我搜遍了所有方法来找到这样做的方法,但我遇到的每种方法都没有考虑到"值"中的多个配对。索引。

关于我如何做到这一点的任何建议?

谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用Array.prototype.reduce将原始数组中的项目累积到由项目键值唯一键入的对象中。由于这会为您留下一个Object而不是一个数组,因此您可以使用Object.values来吐出像示例输出一样的值数组。



let data = [  
   {"key":"A", "values":[1510148301000, 34]},
   {"key":"A", "values":[1509626301000, 55]},
   {"key":"A", "values":[1509539901000, 62]},
   {"key":"B", "values":[1509453501000, 58]},
   {"key":"B", "values":[1509453501001, 57]},
];

let combined = Object.values(data.reduce((accumulator, item) => {
  if (!accumulator[item.key])
    accumulator[item.key] = {key: item.key, values: []};
  accumulator[item.key].values.push(item.values);
  return accumulator;
}, {}));

console.log(combined);




答案 1 :(得分:0)

我不确定你想要什么(合并?),但似乎是这样的:

#pragma priority

答案 2 :(得分:0)

var original=[{"key":"SAME KEY NAME","values":[1510148301000,34]},{"key":"SAME KEY NAME","values":[1509626301000,55]},{"key":"SAME KEY NAME","values":[1509539901000,62]},{"key":"DIFFERENT KEY NAME","values":[1509453501000,58]}];
var result=[];
var isAlreadyAdded=false;

original.forEach(function(outerObj){
 var newObj={};
 var values=[];
    original.forEach(function(element) {

        if(newObj["key"] !== outerObj.key){ 
          newObj["key"]=element.key;
         values=[];
          values.push(element["values"]);
        }else if(outerObj.key ===element.key ){
        values.push(element["values"]);
    }

    });
  newObj["values"]=values;
  var count=0;
  result.push(newObj);
});

var temp=[];
result=result.filter((x, i)=> {
  if (temp.indexOf(x.key) < 0) {
    temp.push(x.key);
    return true;
  }
  return false;
})
console.log(result);