javascript - 在 lodash 中将 _.set 与 _.each 一起应用

标签 javascript lodash

我希望能够为数组内的所有对象设置属性,如下所示:

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 invokes func returning its result, if at least arity number of arguments have been provided, or returns a function that accepts the remaining func arguments, and so on. The arity of func may be specified if func.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/

相关文章:

javascript - 如何在页面加载时延迟此 Javascript 代码?

javascript - javascript 运算符 === 和 lodash 方法 _.eq() 之间的区别?

javascript - 从对象中选取给定属性的值到数组中

javascript - .js 的底层导出失败

javascript - 惯用的 Javascript 编码风格——何时在原型(prototype)上声明函数与在函数构造函数内声明函数

javascript - 图像在浏览器刷新时从左侧滑入/滑出

javascript - Lodash 映射对象上的键和值

javascript - 使用 lodash _.words 时如何不在破折号/连字符上分开?

javascript - 在 Javascript/Lodash 中过滤对象数组中的多个字段

javascript - 用 map (或循环)展平对象数组