Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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 Lodash/下划线语法在组合上优于vanilla JS语法_Javascript_Underscore.js_Lodash - Fatal编程技术网

Javascript Lodash/下划线语法在组合上优于vanilla JS语法

Javascript Lodash/下划线语法在组合上优于vanilla JS语法,javascript,underscore.js,lodash,Javascript,Underscore.js,Lodash,我正在熟悉一些Lodash/下划线方法,并且对语法有一个基本问题 如果我有一个用户对象列表,并希望按年龄小于40岁的用户筛选该列表,我可以编写以下JavaScript: // Vanilla JS var result = users.filter((d) => d.age < 40); //香草JS var结果=用户.过滤器((d)=>d.aged.age

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


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

// Vanilla JS
var result = users.filter((d) => d.age < 40);
//香草JS
var结果=用户.过滤器((d)=>d.age<40);
LoDash/下划线提供了另一种语法来产生相同的结果:

// Lodash, Underscore
var result = _.filter(users, (d) => d.age < 40); 
//Lodash,下划线
var结果=u.filter(用户,(d)=>d.age<40);
这两个函数都产生相同的结果并返回一个数组

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


编辑

因为我收到的答案像“一个需要一个额外的库,而另一个不需要”和“它们执行不同的代码”,我想澄清一下


从一个角度来看,使用lodash/下划线方法比普通的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
const filterFirst = compose(_.filter, _.head);
filterFirst([1, 2, 3], x => x % 2 == 0); // 2
这些函数可以组合,因为它们只依赖于它们的参数。Lodash的
过滤器
功能也是如此

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
const filterFirst = compose(_.filter, _.head);
filterFirst([1, 2, 3], x => x % 2 == 0); // 2
Array.prototype.filter
不是以数组作为参数调用的。相反,它使用其内部
这个
值,该值通常是调用该方法的数组


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
const filterFirst = compose(_.filter, _.head);
filterFirst([1, 2, 3], x => x % 2 == 0); // 2
这些函数可以组合,因为它们只依赖于它们的参数。Lodash的
过滤器
功能也是如此

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
const filterFirst = compose(_.filter, _.head);
filterFirst([1, 2, 3], x => x % 2 == 0); // 2
Array.prototype.filter
不是以数组作为参数调用的。相反,它使用其内部
这个
值,该值通常是调用该方法的数组


compose
函数对该
一无所知。它只适用于参数和返回值,这意味着它不能用于编写依赖于
而不仅仅是参数的函数。

好吧,在使用前者时,您使用的是Vanilla JS,而不是使用库。依赖项:0。因此优势是相对的,IMO,因为这仅仅是图书馆与香草的比较。与jQuery和vanilla没有什么不同。选择你的毒药。对不起,我应该更具体一点。我从组合的角度来寻找它的优点,区别在于一个使用库函数,另一个使用vanilla JS函数。他们正在执行不同的代码(在本例中,执行完全相同的事情)。@MatthewHerbst,正如我上面所指出的,我正在寻找组合优势。你所说的“组合优势”是什么意思?好吧,使用前者,你是在用Vanilla JS编写,而不是使用库。依赖项:0。因此优势是相对的,IMO,因为这仅仅是图书馆与香草的比较。与jQuery和vanilla没有什么不同。选择你的毒药。对不起,我应该更具体一点。我从组合的角度来寻找它的优点,区别在于一个使用库函数,另一个使用vanilla JS函数。他们正在执行不同的代码(在本例中,执行完全相同的事情)。@MatthewHerbst,正如我上面所说的,我正在寻找组合优势。你所说的“组合优势”是什么意思?这正是我所寻找的。谢谢你的直截了当的回复。这正是我想要的。感谢您的直截了当的回复。