Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
难以理解过滤数组-雄辩的Javascript第5章_Javascript_Arrays_Object_Filter - Fatal编程技术网

难以理解过滤数组-雄辩的Javascript第5章

难以理解过滤数组-雄辩的Javascript第5章,javascript,arrays,object,filter,Javascript,Arrays,Object,Filter,我目前正在用流利的javascript学习javascript。在第5章中,我了解了filter函数的内部部分。但不了解console.log中的代码行: function filter(array, test) { let passed = []; for (let element of array) { if (test(element)) { passed.push(element); } } return pass

我目前正在用流利的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));
我不明白的是:


script=>script.living做什么?请提供帮助。

在javascript中,所有内容都被视为对象。函数也是对象。所以函数可以作为参数传递给其他函数。那些以其他函数为参数的函数称为高阶函数。这里的过滤函数是一个高阶函数。因为它可以将函数作为参数

现在让我们关注您的查询。您编写的代码不理解以下代码:

filter(SCRIPTS, script => script.living)
上面的代码也可以按如下方式编写

filter(SCRIPTS, function(script) {
   return script.living 
})
两者是等价的。第一个被称为。Arrow函数是常规函数体的较短版本


这里,我们向filter函数传递了两个参数。一个是SCRIPTS变量,另一个是arrow函数形式的函数,也可以是常规函数。没关系。filter函数将使用函数参数进行内部使用。

这是一个函数参数。您的测试参数是作为函数调用的,因此通过传递这个特定的箭头函数,filter可以通过检查每个元素的活动属性的真实性来知道在过滤数组中保留哪些成员。不过这是一个特别奇怪的范例,考虑到Array类的原型中已经包含了一个过滤器函数,它的工作原理与此非常相似/相同……非常感谢@AL zami使其变得如此简单。我希望我能投它一票。但我不能,因为我的名声不好
filter(SCRIPTS, function(script) {
   return script.living 
})