首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lodash chaining filter和forEach

lodash chaining filter和forEach
EN

Stack Overflow用户
提问于 2017-01-25 18:32:49
回答 3查看 7.4K关注 0票数 3

我有以下的工作代码用lodash写的,最新版本

代码语言:javascript
复制
            _.forEach(_.filter($ctrl.data, ['x', 'y']), function (elem) {
                ...
            });

如果我尝试将其转换为链,它将永远不会在forEach中执行块代码。

代码语言:javascript
复制
            _.chain($ctrl.data)
                .filter(['x', 'y'])
                .forEach(function (elem) {
                   ...
                });

为什么?

EN

回答 3

Stack Overflow用户

发布于 2017-01-26 18:41:05

我通过使用_($ctrl.data)而不是_.chain($ctrl.data)修复了这个问题。我读到这里的主要区别是,来自lodash的全局函数调用_.value()时,它在结尾有一个“终结器函数”。

使用_.chain的等效方法是在_.forEach()之前显式调用_.value()。但是仍然不知道问题出在哪里,因为在我看来,forEach是一个“终结器函数”。

票数 3
EN

Stack Overflow用户

发布于 2017-05-31 03:00:01

我刚刚遇到了一个类似的问题。我正在使用_(blah)语法,但仍然遇到问题。

在我的例子中,代码是这样的:

代码语言:javascript
复制
_(items).forEach((x) => doSomething(x));

原来doSomething返回的是一个boolean。我猜lodash看到了这个返回值,并将forEach视为map,而不是对其求值。但是,我尝试在末尾添加一个value(),但在运行时得到了一个value is not a function错误。

在我的例子中,问题是通过包装doSomething调用来解决的:

代码语言:javascript
复制
_(items).forEach((x) => { doSomething(x); });

看起来更像是虫子而不是什么。

票数 2
EN

Stack Overflow用户

发布于 2019-02-19 22:51:44

这是因为lodash中链式方法的执行是惰性的。

来自lodash关于序列的文档:

链接方法的执行是延迟的,也就是说,直到隐式或显式地调用_#value时才会执行。

这意味着以下代码:

代码语言:javascript
复制
_.chain(['a','b','c'])
    .filter(_.stubTrue)
    .forEach(i => console.log(i))

除非序列以value()结束,否则不会将任何内容打印到控制台

代码语言:javascript
复制
_.chain(['a','b','c'])
    .filter(_.stubTrue)
    .forEach(i => console.log(i))
    .value()
a
b
c
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41849244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档