'将'新数字“推入一个对象数组中

时间:2018-02-22 09:54:04

标签: javascript arrays d3.js

我在CSV文件中存储了很长的日期列表。我已成功使用d3.js成功加载此数据集。现在我想在此数据集中添加另一列,其中包含列表中每个日期的随机数。

我相信这个数据集已经作为一个对象数组加载。所以我使用下面的代码尝试迭代数组。我认为push方法是错误的方法,因为这涉及到对象。

d3.csv('claims_cwy.csv', rowConverter, function(dataset) {
    console.log(dataset);

    for(var i=0; i<10; i++) {           
        var newNumber = Math.round(Math.random() * 10);
        dataset[i].push(newNumber);
    }

my dataset

4 个答案:

答案 0 :(得分:3)

尽管这个问题有几个答案,但没有一个涉及惯用的D3:

由于您已经有row conversion function,因此请使用该函数更改数据数组中的对象。只需将其添加到行函数(使用d作为第一个参数):

d.random = Math.random() * 10;
//  ^----- or any other property name

这是一个演示:

var csv = `foo,bar,baz
12,34,21
14,42,27
17,35,17`;

var data = d3.csvParse(csv, rowConverter);

function rowConverter(d) {
  d.random = Math.random() * 10;
  return d;
}

console.log(data)
<script src="https://d3js.org/d3.v4.min.js"></script>

答案 1 :(得分:1)

你可以试试这个:

d3.csv('claims_cwy.csv', rowConverter, function(dataset) {
    console.log(dataset);

    for(var i=0; i<dataset.length; i++) {           
        var newNumber = Math.round(Math.random() * 10);
        dataset[i].nameOfProperty = newNumber;
    }
}

您从数组中获取每个对象,并为其提供一个包含随机数的新属性。

答案 2 :(得分:0)

如果要为数组中的每个对象添加一个随机数,这就是:

for(var i = 0; i < 10; i++) {           
    var newNumber = Math.round(Math.random() * 10);
    dataset[i]['random_number'] = newNumber;
}

这将为每个对象

创建一个名为random_number的新属性

答案 3 :(得分:0)

你可以使用数组map()方法做得很漂亮。来自MDN

  

map为一个元素中的每个元素调用一次提供的回调函数   数组,按顺序,并从结果中构造一个新数组。

因此,对于数据集数组中的每个元素,都会返回原始属性,并添加新的random_number属性。

请参阅working fiddle

var dataset = [
    {"date": "02/10/2017", "climb": "696"},
    {"date": "04/10/2017", "climb": "1004"},
    {"date": "06/10/2017", "climb": "1516"},
    {"date": "13/10/2017", "climb": "932"},
    {"date": "15/10/2017", "climb": "2005"}
];

dataset = dataset.map(function(d) {
  return {
      "date": d.date,
      "climb": d.climb,
      "random_number": Math.round(Math.random() * 10)
  }
});

值得一提的是,当您使用d3时,您可以使用d3-random module中的各种随机数方法之一而不是Math.random()。