关于javascript:Lodash / Underscore语法相对于vanilla JS语法的组合优势

Compositional advantage of Lodash/Underscore syntax over vanilla JS syntax

我正在熟悉一些lodash/下划线方法,并对语法有一个基本问题。

如果我有一个用户对象列表,并且希望按年龄小于40岁的用户筛选列表,我可以编写以下普通的javascript:

1
2
// Vanilla JS
var result = users.filter((d) => d.age < 40);

lodash/underline提供了另一种语法来产生相同的结果:

1
2
// Lodash, Underscore
var result = _.filter(users, (d) => d.age < 40);

这两种方法都会产生相同的结果并返回一个数组。

使用后一种语法的组合优势(如果有的话)是什么?为什么使用纯JS语法更可取?

编辑

因为我收到的答案是"一个需要额外的库,另一个不需要","它们执行不同的代码",我想澄清一下。

从函数组合的角度来看,使用lodash/underline方法比使用普通的JS方法有什么优势吗?


假设您具有以下函数compose

1
2
3
4
5
function compose(f, g) {
  return function apply(...args) {
    return g(f(...args));
  }
}

您可以使用它将两个函数组合在一起以创建单个函数。

1
2
3
4
5
6
7
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函数也是如此。

1
2
const filterFirst = compose(_.filter, _.head);
filterFirst([1, 2, 3], x => x % 2 == 0); // 2

不使用数组作为参数调用Array.prototype.filter。相反,它使用它的内部this值,该值通常是调用该方法的数组。

compose函数对this一无所知。它只与参数和返回值一起工作,这意味着它不能用来组成依赖于this的函数,而不仅仅是参数。