我在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);
}
答案 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属性。
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()。