我熟悉一些Lodash / Underscore方法,并且有一个关于语法的基本问题。
如果我有一个用户对象列表,并希望年龄小于40的用户过滤列表,我可以编写以下vanilla JavaScript:
// Vanilla JS
var result = users.filter((d) => d.age < 40);
LoDash / Underscore提供了另一种语法来产生相同的结果:
// Lodash, Underscore
var result = _.filter(users, (d) => d.age < 40);
这两个产生相同的结果并返回一个数组。
使用后一种语法有什么组成优势?为什么使用普通的JS语法更好?
修改
因为我收到的回答是“一个需要额外的库而另一个不需要”和“他们执行不同的代码”,我想澄清一下。
从function composition的角度来看,使用lodash / underscore方法比使用Vanilla JS方法有什么好处吗?
答案 0 :(得分:4)
想象一下,你有以下功能compose
。
function compose(f, g) {
return function apply(...args) {
return g(f(...args));
}
}
您可以使用它将两个功能组合在一起以创建单个功能。
const inc = x => x + 1;
const double = x => x * 2;
const doubleAndInc = compose(double, inc);
doubleAndInc(3) // 7
const incAndDouble = compose(inc, double);
incAndDouble(3) // 8
这些功能可以组成,因为他们只依赖于他们的参数。 Lodash的filter
函数也是如此。
const filterFirst = compose(_.filter, _.head);
filterFirst([1, 2, 3], x => x % 2 == 0); // 2
不使用数组作为参数调用 Array.prototype.filter
。相反,它使用其内部this
值 - 通常是调用该方法的数组。
compose
函数对this
一无所知。它只适用于参数和返回值,这意味着它不能用于组成依赖this
而不仅仅是参数的函数。