代码之家  ›  专栏  ›  技术社区  ›  Catalin Vasilescu

将一个csv的值添加到另一个csv

  •  0
  • Catalin Vasilescu  · 技术社区  · 7 年前

    我有两个这样的csv文件:

    csv1 = `id,grade,gpa
    1,42,2
    1,44,2
    1,52,2
    1,62,2
    2,65,3 
    3,17,2`;
    
    csv2 = `id,status
    2,yes
    1,no
    3,no`;
    

    我是这样读csv的:

      d3.queue()
         .defer(d3.csv, "csv1.csv")
         .defer(d3.csv, "csv2.csv")
      .await(function(error, data, data2) {...}
    

    把它们转换成:

     data.forEach(function(d) {
     d.id = d.id;
     d.grade = +d.grade;
     d.gpa = + d.gpa;
    
     });
    
     data2.forEach(function(d) {
     d.id = d.id;
     d.status = d.status;
     });
    

    我想根据ID将值“status”从第二个CSV添加到第一个CSV…

    像这样的东西

     [{
      "id": "1",
      "grade": "42",
      "status": "no"
      },
      {
      "id": "1",
       "grade": "44",
      "status": "no"
      },....]
    

    为此,我尝试了类似的操作,但收到以下错误消息

    data1.forEach(function(d) {
    var obj = data2.find(function(e) {
    return d.id === e.id
    });
    d.status = obj.status;
    });
    

    未捕获类型错误:无法读取未定义的属性“status”

    知道为什么吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   amrender singh    7 年前

    您的问题是没有检查,是否在数据2中找到obj。请尝试以下操作:

    data1.forEach(function(d) {
      var obj = data2.find(function(e) {
       return d.id === e.id
      });
      if(obj)
       d.status = obj.status;
    });