来自csv数据的新数组

时间:2016-05-09 09:21:17

标签: javascript jquery d3.js

我有以下csv数据:

id,v1,v2,v3,v4,v5
Lo,32,45,37,53,22

我想创建一个看起来像这样的新数组:

id2,value
v1,32
v2,45
v3,37
v4,53
v5,22

要做到这一点,我使用以下代码:

d3.csv("dataSBar1.csv", function(error, data) {
  if (error) throw error;

var values = d3.keys(data[0]).filter(function(key) {
    return key !== "id";});  

data.forEach(function(d) {
 for (var i = 0; i <= values.length; i++) {
    d.value = +d[values[i]];
  return d;}});     

  /*---------- create new array ----------*/

var array = $.map(data, function (d) {
for( var i=0; i<=values.length; i++){
    return {
        id2: values[i],
        value: d[values[i]]
    }
  }
});         

它只返回我

0: Object
   id2: "v1"
   value: "32"

仅此而已。 我做错了什么?

提前致谢!

2 个答案:

答案 0 :(得分:1)

为了澄清,如果你在一个循环中返回,循环就会停止,所以你想要创建一个内部变量来存储循环结果的值或使用另一个映射。

如果两个数组的长度始终相同,那么像这样的东西也可以起作用:

var id2 = id.map(function( id, index ) {
    return {
        "id2" : id,
        "value" : lo[index]
    };
});

答案 1 :(得分:1)

不需要这么多for循环,只需按照以下步骤操作:

d3.csv("my.csv", function(error, data) {
  if (error) throw error;

  //get all values without id    
  var values = d3.keys(data[0]).filter(function(key) {
    return key !== "id";
  });
  //iterate through the values and get the value using map.
  var id2 = values.map(function(id, index) {
    return {
      "id2": id,
      "value": +data[0][id]
    };

  });
  console.log(id2)
});

工作代码here