Javascript 用滤器过滤
我得到了currying部分,但我不知道currying函数是如何从filter传递到obj的,有人能给我解释一下吗?在理解您共享的代码之前,让我们先学习filter函数的语法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
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;
});