Lodash链是如何工作的?

时间:2016-12-18 21:40:26

标签: javascript lodash

Lodash v4.17.2

有人可以澄清链接是如何工作的吗?我刚刚找不到任何解释lodash方法返回结果的文档或博客。 在下面的代码示例中,为什么filterAge的第二个赋值不起作用?还是类似更像链接的jquery?如果有人有资源解释这一点,我很乐意。

let characters = [
  { 'name': 'barney1', 'age': 36, 'pets': ['hoppy'] },
  { 'name': 'barney2', 'age': 36, 'pets': ['hoppy'] },
  { 'name': 'barney3', 'age': 36, 'pets': ['hoppy'] },
  { 'name': 'barney4', 'age': 36, 'pets': ['hoppy'] },
  { 'name': 'fred',   'age': 40, 'pets': ['baby puss', 'dino'] }
];

let filterAge = _.take(_.slice(_.filter(characters, { 'age': 36 }), 2), 5);
filterAge = _.filter(characters, { 'age': 36 })
          .slice(2)
          .take(5);

console.log(JSON.stringify(filterAge));
<script src="https://cdn.jsdelivr.net/lodash/4.17.2/lodash.min.js"></script>

fiddle

2 个答案:

答案 0 :(得分:3)

您可以在_(value)的描述和库的其他“Seq”函数/方法中找到关于链接或序列的文档。

要使用lodash链接,您需要使用_(value)_.chain(value)来创建序列,并在结尾处使用.value()来检索结果。

在这些之间,每个lodash的其他功能将作为序列的方法提供,有两个不同之处:

  • 方法返回一个修改后的序列对象,该对象保存当前值而不是值本身,但.value()方法除外。

  • 第一个参数已被删除。每个方法都从序列对象之前获取值,而不是从参数中获取值。并且,传递给函数的其他参数会向方法的左侧移动一个位置。

对于你的例子:

filterAge = _.chain(characters)
    .filter({ 'age': 36 })
    .slice(2)
    .take(5)
    .value();

答案 1 :(得分:1)

为了与lodash链接,你需要先用_()调用包装你的对象 - 这将允许在你的包装实例上调用任何lodash方法。然后,为了获得该值,您需要在包装对象上调用value方法。所以你的例子看起来像这样:

filterAge = _(characters).filter({ 'age': 36 })
                         .slice(2)
                         .take(5).value();

如果没有包装你的对象,就不能链接函数调用,因为你总是只返回没有实现像take这样的lodash方法的数组。