增量运算符在这里做什么,以及它如何改变比例?

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

forEach块内上面的增量运算符在做什么,特别是:

d3.tsv('data.tsv', (err, data) => {
  // clean the data
  data.forEach(d => {
    d.date = new Date(d.date); // x
    ++d[city]; // y`

它如何改变比例?

完整代码:Scales and Axes

javascript d3.js syntax data-visualization data-retrieval
1个回答
0
投票

这类问题(“这件事在这里做什么?”)有时很难回答,因为我们不知道作者脑子里有什么。但是在这种情况下,我相信我有一种直觉:作者只是不正确地将字符串强制为数字。

您可能知道,TSV数据已加载并解析为字符串,因此,当字段中有数字时,必须强制它们。最常见的方法是,在行函数中:

d.foo = +d.foo;
return d;

如您在此演示中所看到的,如果只执行+d.foo,则该对象什么也没有发生:

const obj = {
  value: "42"
};
+obj.value;
console.log(obj)
console.log(typeof obj.value)

话虽如此,我相信该代码的作者刚刚发现,如果您使用前缀增量运算符,则可以更改对象而不必返回它:

const obj = {
  value: "42"
};
++obj.value;
console.log(obj)
console.log(typeof obj.value)

并且在这里您可以看到我为什么说错误地:该值正在增加。如果查看链接的Blockbuilder中的数据,您会看到San Francisco的所有数字都比TSV中的实际数字大1个单位。

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