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

问题描述 投票:1回答:4

我有一个很长的日期列表存储在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

javascript arrays d3.js
4个回答
0
投票

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

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

这将为每个对象创建一个名为random_number的新属性


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
投票

你可以试试这个:

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

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


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()。

© www.soinside.com 2019 - 2024. All rights reserved.