试图理解javascript中的.some()

试图理解javascript中的.some(),javascript,d3.js,Javascript,D3.js,这是源代码的一部分 我试图理解names.some(函数(d)…})是如何工作的 传递给.some()的匿名函数不应该返回一个可以对“countires”求值的条件语句吗 names.some(…)何时返回true或false 为什么不在没有“返回”的情况下在“国家”中创建“名称”属性 queue() .defer(d3.json,“world-110m.json”) .延期(d3.tsv,“世界国家名称.tsv”) .等待(准备好); 函数就绪(错误、世界、名称){ var countries

这是源代码的一部分

我试图理解
names.some(函数(d)…})
是如何工作的

  • 传递给
    .some()
    的匿名函数不应该返回一个可以对“countires”求值的条件语句吗

  • names.some(…)
    何时返回true或false

  • 为什么不在没有“返回”的情况下在“国家”中创建“名称”属性

  • queue()
    .defer(d3.json,“world-110m.json”)
    .延期(d3.tsv,“世界国家名称.tsv”)
    .等待(准备好);
    函数就绪(错误、世界、名称){
    var countries=topojson.feature(world,world.objects.countries).features
    国家=国家。过滤器(功能(d){
    返回名称.some(函数(n){
    如果(d.id==n.id)返回d.name=n.name;
    });
    })
    
    1)由于它使用的是
    名称.some()
    ,因此该函数正在测试
    名称的每个元素,而不是
    国家的

    2) 当任何名称的
    id
    d.id
    匹配且
    n.name
    不为空时

    3) 它将始终创建属性。但是如果没有
    返回
    。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;
    将赋值和返回值组合成一个语句。代码利用了函数在不执行
    return
    语句时隐式返回
    undefined
    ,并且
    undefined
    是错误的这一事实。

    非常感谢您的澄清。我有点赞同n由于.some()中的代码没有显式语句“return true”。因此,返回变量(d.name)也意味着true?我应该在哪个主题下了解这个概念?它只关心值是否为truthy。任何非空字符串都是truthy。请参阅