我有以下的工作代码用lodash写的,最新版本
_.forEach(_.filter($ctrl.data, ['x', 'y']), function (elem) {
...
});如果我尝试将其转换为链,它将永远不会在forEach中执行块代码。
_.chain($ctrl.data)
.filter(['x', 'y'])
.forEach(function (elem) {
...
});为什么?
发布于 2017-01-26 18:41:05
我通过使用_($ctrl.data)而不是_.chain($ctrl.data)修复了这个问题。我读到这里的主要区别是,来自lodash的全局函数调用_.value()时,它在结尾有一个“终结器函数”。
使用_.chain的等效方法是在_.forEach()之前显式调用_.value()。但是仍然不知道问题出在哪里,因为在我看来,forEach是一个“终结器函数”。
发布于 2017-05-31 03:00:01
我刚刚遇到了一个类似的问题。我正在使用_(blah)语法,但仍然遇到问题。
在我的例子中,代码是这样的:
_(items).forEach((x) => doSomething(x));原来doSomething返回的是一个boolean。我猜lodash看到了这个返回值,并将forEach视为map,而不是对其求值。但是,我尝试在末尾添加一个value(),但在运行时得到了一个value is not a function错误。
在我的例子中,问题是通过包装doSomething调用来解决的:
_(items).forEach((x) => { doSomething(x); });看起来更像是虫子而不是什么。
发布于 2019-02-19 22:51:44
这是因为lodash中链式方法的执行是惰性的。
来自lodash关于序列的文档:
链接方法的执行是延迟的,也就是说,直到隐式或显式地调用_#value时才会执行。
这意味着以下代码:
_.chain(['a','b','c'])
.filter(_.stubTrue)
.forEach(i => console.log(i))除非序列以value()结束,否则不会将任何内容打印到控制台
_.chain(['a','b','c'])
.filter(_.stubTrue)
.forEach(i => console.log(i))
.value()
a
b
chttps://stackoverflow.com/questions/41849244
复制相似问题