我希望能够为数组内的所有对象设置属性,如下所示:
var items = [{ a: 1 }, { a: 2 }, { a: 3 }];
_.each(items, set('a', 4));
// result should be [{ a: 4 }, { a: 4 }, { a: 4 }]
我尝试使用 _.rearg
来实现此目的上_.set
更改将对象带到最后一个对象的参数,如下所示:
var set = _.rearg(_.set, [2, 0, 1]);
但是,我无法获取 _.curry
在调用 _.rearg
的基础上工作.
var set = _.curry(_.rearg(_.set, [2, 0, 1]));
set('a', 3, { a: 4 })
// returns Object {a: 3} correctly
set('a', 3)
//returns undefined, should be a function
所以能够像这样调用它的期望结果 set('a', 3)({ a: 2 })
抛出错误,因为它不返回函数。
如何使用 lodash 完成此任务?我一定错过了什么。
最佳答案
_.curry
函数接受一个参数arity
,您可能应该将其设置为3
:
_.curry(func, [arity=func.length])
Creates a function that accepts arguments of
func
and either invokesfunc
returning its result, if at leastarity
number of arguments have been provided, or returns a function that accepts the remainingfunc
arguments, and so on. Thearity
of func may be specified iffunc.length
is not sufficient.
_.rearg
的结果的长度值为零,但底层函数需要三个参数,因此您需要手动指定:
var set = _.curry( _.rearg(_.set, [2, 0, 1]), 3 );
这是一个现场演示:http://codepen.io/anon/pen/qbgmPq
关于javascript - 在 lodash 中将 _.set 与 _.each 一起应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35371448/