Javascript 如何连接重复键的值

Javascript 如何连接重复键的值,javascript,csv,dictionary,concatenation,Javascript,Csv,Dictionary,Concatenation,在将csv读入javascript字典时,我如何连接原本是重复键的值?我已经看到了如何使用bash、c#和perl实现这一点的答案,但我还没有找到Javascript的答案。以下是我所拥有的: var subjects = {}; d3.csv("test.csv", function(data) { for (var i = 0; i < data.length; i++) { subjects[data[i].Id] = data[i].VALUE;

在将csv读入javascript字典时,我如何连接原本是重复键的值?我已经看到了如何使用bash、c#和perl实现这一点的答案,但我还没有找到Javascript的答案。以下是我所拥有的:

var subjects = {};

d3.csv("test.csv", function(data) {
  for (var i = 0; i < data.length; i++)
  {
      subjects[data[i].Id] = data[i].VALUE;    
  }
  console.log(subjects);
});
我想输出为:

{"id1": ["subject1", "subject3"], "id2": ["subject1"]...}

只需检查您的输出是否已经有了键,如果已经有了,则将新值添加到数组中。否则您将创建一个数组

d3.csv("test.csv", function(data) {
    var subjects = {};
    for (var i = 0; i < data.length; i++)
    {
        // Check if key already exists
        if(subjects.hasOwnProperty(data[i].Id)){
            // push data to array
            subjects[data[i].Id].push(data[i].VALUE);
        }else{
            // create new key and array
            subjects[data[i].Id] = [data[i].VALUE];
        }
    }
    console.log(subjects);
});
d3.csv(“test.csv”),函数(数据){
var主题={};
对于(变量i=0;i
for
循环中尝试以下操作:

typeof subjects[data[i].Id] == 'undefined' && (subjects[data[i].Id] = []);      
subjects[data[i].Id].push(data[i].VALUE);    

您可以将其放入一个数组,然后将内容推入该数组 var主题={}

d3.csv("test.csv", function(data) {
  for (var i = 0; i < data.length; i++)
  {
      //first time we see this id, turn it into an array
      if(typeof subjects[data[i].Id] != "object"){
        subjects[data[i].Id] = [];
      }
      //push content to the array
      subjects[data[i].Id].push(data[i].VALUE); 
  }
  console.log(subjects);
});
d3.csv(“test.csv”),函数(数据){
对于(变量i=0;i
如果使用
reduce
,您可以稍微减少代码的占用空间:

var out = data.reduce((p, c) => {
  const id = c.Id;
  p[id] = p[id] || [];
  p[id].push(c.VALUE);
  return p;
}, {});
结果

{
  "id1": [
    "subject1",
    "subject3"
  ],
  "id2": [
    "subject1"
  ]
}

{
  "id1": [
    "subject1",
    "subject3"
  ],
  "id2": [
    "subject1"
  ]
}