这是https://bl.ocks.org/mbostock/4183330
的部分代码我想了解names.some(function(d)...})
的工作原理。
不应该传递给.some()
的匿名函数返回条件语句" countires"可以评估?
names.some(..)
何时返回true或false?
为什么不d.name = n.name
创建"名称"在"国家"没有"返回"?
queue()
.defer(d3.json, "world-110m.json")
.defer(d3.tsv, "world-country-names.tsv")
.await(ready);
function ready(error, world, names) {
var countries = topojson.feature(world,world.objects.countries).features
countries = countries.filter(function(d) {
return names.some(function(n) {
if (d.id == n.id) return d.name = n.name;
});
})
答案 0 :(得分:3)
1)由于它使用names.some()
,因此该函数正在测试names
的每个元素,而不是countries
。
2)如果任何名称的id
与d.id
匹配且n.name
不为空。
3)它将始终创建属性。但如果没有return
,则.some()
无法获得可以评估的真值。
如果他们写的话可能会更容易理解:
return names.some(function(n) {
if (d.id == n.id) {
d.name = n.name;
return d.name;
} else {
return false;
}
});
return d.name = n.name;
将赋值和返回值组合到一个语句中。并且代码正在利用这样的事实:当函数不执行undefined
语句时,函数会隐式返回return
,并且undefined
是假的。