试图在javascript中理解.some()

时间:2017-02-06 20:07:47

标签: javascript d3.js

这是https://bl.ocks.org/mbostock/4183330

的部分代码

我想了解names.some(function(d)...})的工作原理。

  1. 不应该传递给.some()的匿名函数返回条件语句" countires"可以评估?

  2. names.some(..)何时返回true或false?

  3. 为什么不d.name = n.name创建"名称"在"国家"没有"返回"?

  4. 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;
         });
    })
    

1 个答案:

答案 0 :(得分:3)

1)由于它使用names.some(),因此该函数正在测试names的每个元素,而不是countries

2)如果任何名称的idd.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是假的。