Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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 用滤器过滤_Javascript_Currying - Fatal编程技术网

Javascript 用滤器过滤

Javascript 用滤器过滤,javascript,currying,Javascript,Currying,我得到了currying部分,但我不知道currying函数是如何从filter传递到obj的,有人能给我解释一下吗?在理解您共享的代码之前,让我们先学习filter函数的语法 let dragons = [ { name: "Test1", power: "Fire" }, { name: "Test2", power: "Lightning" }, { name: "Test3", power: "Fire" }, { name: "Test4", power

我得到了currying部分,但我不知道currying函数是如何从filter传递到obj的,有人能给我解释一下吗?

在理解您共享的代码之前,让我们先学习filter函数的语法

let dragons = [
    { name: "Test1", power: "Fire" },
    { name: "Test2", power: "Lightning" },
    { name: "Test3", power: "Fire" },
    { name: "Test4", power: "Fire" },
    { name: "Test5", power: "Speed" },
    { name: "Test6", power: "Fly" }
];

let hasPower = power =>
    obj => 
        obj.power === power

let fireDragons = dragons.filter(hasPower("Fire"));
回调函数是一个谓词,用于测试数组的每个元素。返回true以保留元素,否则返回false,使用三个参数:
元素
索引
数组本身<但是,code>thisArg
是可选的

现在,让我们试着理解代码

var newArray = arr.filter(callback(currentValue[, index[, array]])[, thisArg])
功能
hasPower
可以更新为:

let hasPower = power =>
    obj => 
        obj.power === power
请记住,无论何时执行
hasPower
,它都会简单地返回一个函数(稍后执行)并访问
power
变量。(阅读更多内容:)

现在是火龙队

let hasPower = function (power) {
    return function (obj) {
        return obj.power === power;
    }
}
您正在将函数作为参数传递给筛选函数(也调用它)

当执行这行代码时,首先执行函数
hasPower(“Fire”)
,从该函数返回的任何内容都将作为
回调函数传递给过滤器

基本上,它会变成这样:

let fireDragons = dragons.filter(hasPower("Fire"));
或者完全像这样:


始终尝试在开发人员工具中进行调试,以了解代码是如何工作的,并且可以随意使用常规函数替换箭头函数,以使其更可读/可理解

如果我告诉你用这种方式调用过滤器相当于:
hasPower(“Fire”)(龙[index])
对于每一条龙,这会有帮助吗?将龙数组的每个项传递给传递它的函数。我得到了更多关于过滤器的信息,这就是currying的工作原理,但我不明白的是dragon对象是如何传递给hasPower的,这就是HMR刚才评论的神奇之处……它是
filter()
的回调功能,每个dragon对象都被传递给
hasPower
的返回值,这也是一个函数。
let fireDragons = dragons.filter(function (obj) {
    // Having access to the `hasPower` variable which is "Fire" in your case.
    return obj.power === power;
});