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

标签 javascript underscore.js lodash

我正在熟悉一些 Lodash/Underscore 方法,并且有一个关于语法的基本问题。


如果我有一个用户对象列表,并且想按年龄小于 40 岁的用户过滤列表,我可以编写以下普通 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 方法有什么优势吗?

最佳答案

假设您有以下函数 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 而不仅仅是参数的函数。

关于javascript - Lodash/Underscore 语法相对于 vanilla JS 语法的组合优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37447756/

相关文章:

javascript - 当动态填充输入字段时如何启用提交按钮?

javascript - 在 Perl 中支持 JavaScript 的网络爬虫?

javascript 数组对象转换一个键,数组值单个对象

javascript - 如何以功能样式仅更改对象数组中的一个特定对象?

javascript - Vue.js - 为按字母顺序排序的列表创建字母标题

javascript - 如何转换URL格式中的特殊字符

javascript - 查找哪个元素最先出现 underscore.js

javascript - 将基本类型的 Javascript 数组分成多个部分

javascript - 获取对象数组中出现次数的计数

javascript - ngClass 和 AngularJS 的表单验证不起作用