【问题标题】:Difficulty understanding Filtering Array - Eloquent Javascript Chapter 5过滤数组的难点理解 - Eloquent Javascript 第 5 章
【发布时间】:2021-03-24 06:21:36
【问题描述】:

我目前正在使用 Eloquent javascript 学习 javascript。在第 5 章中,我了解了 filter() 函数内部的部分。但是不明白console.log里面的那行代码:

    function filter(array, test) {
     let passed = [];
     for (let element of array) {
      if (test(element)) {
        passed.push(element);
    }
  }

  return passed;

}

console.log(filter(SCRIPTS, script => script.living));

我不明白的那一行:

     console.log(filter(SCRIPTS, script => script.living))
     // → [{name: "Adlam", …}, …]

script=>script.living 做什么?请帮忙。

【问题讨论】:

  • 这是一个arrow function。您的 test 参数作为函数调用,因此将这个特定的箭头函数传递给它可以让 filter 通过检查每个元素的 living 属性的真实性来知道要在过滤后的数组中保留哪些成员。这是一个特别奇怪的范例,考虑到 Array 类的原型中已经包含一个 filter() 函数,它的工作原理与此非常相似/相同...

标签: javascript arrays object filter


【解决方案1】:

在 javascript 中,一切都被视为一个对象。函数也是对象。所以函数可以作为参数传递给其他函数。这些将其他函数作为参数的函数称为Higher Order Function。这里你的filter 函数是一个高阶函数。因为它可以将函数作为参数。

现在让我们专注于您的查询。你写的你看不懂下面的代码:

filter(SCRIPTS, script => script.living)

上面这段代码也可以写成下面这样

filter(SCRIPTS, function(script) {
   return script.living 
})

两者是等价的。第一个称为Arrow Function。箭头函数是常规函数体的较短版本。

在这里,我们向filter 函数传递了两个参数。一个是SCRIPTS变量,一个是function箭头函数形式,也可以是正则函数,没关系 em>)。 filter 函数将使用函数参数作为其内部使用。

【讨论】:

  • 非常感谢@AL-zami 让您变得如此简单。我希望我能投票。但我不能,因为我的声誉低。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 2015-09-09
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多