【问题标题】:How to concatenate values of duplicate keys如何连接重复键的值
【发布时间】:2018-01-04 18:32:39
【问题描述】:

在将 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);
});

这显然会覆盖现有的键。相反,我希望键是值的数组。 csv 基本上看起来像:

Id, VALUE
id1, subject1
id2, subject1
id1, subject3

我想输出为:

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

【问题讨论】:

    标签: javascript csv dictionary concatenation


    【解决方案1】:

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

    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);
    });
    

    【讨论】:

      【解决方案2】:

      for 循环中试试这个:

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

      【讨论】:

        【解决方案3】:

        你可以把它做成一个数组,然后把内容压入那个数组 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);
        });
        

        【讨论】:

          【解决方案4】:

          如果您使用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"
            ]
          }
          

          DEMO

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-04-24
            • 1970-01-01
            • 2021-04-13
            • 1970-01-01
            • 2021-01-24
            • 2021-06-11
            • 1970-01-01
            • 2015-08-03
            相关资源
            最近更新 更多