Lodash:如何向集合中的所有值添加新字段

sow*_*dri 34 javascript underscore.js lodash

例:

var arr = [{name: 'a', age: 23}, {name: 'b', age: 24}]  
var newArr = _.enhance(arr, { married : false });

console.log(newArr); // [{name: 'a', age: 23, married : false}, {name: 'b', age: 24, married : false}]
Run Code Online (Sandbox Code Playgroud)

我正在寻找能做到这一点的事情.注意,lodash中不存在增强功能.用lodash可以做到这一点吗?
如果不是 - 可能添加?

谢谢,

Mat*_*ics 52

你可能想要extend each你的对象.

在制作一个优秀的观点时,mu太短暂了.更新以创建一个全新的数组.

var arr = [{name: 'a', age: 23}, {name: 'b', age: 24}];

var newArr = _.map(arr, function(element) { 
     return _.extend({}, element, {married: false});
});
Run Code Online (Sandbox Code Playgroud)

如果要将其添加到库中,

_.enhance = function(list, source) {
    return _.map(list, function(element) { return _.extend({}, element, source); });   
}
Run Code Online (Sandbox Code Playgroud)

  • 你正在修改`arr`并且lodash的'each`将返回`arr`所以`newArr`会产生误导; 你根本不需要`_.extend`,你可以用`function(e){e.married = false}`(http://jsfiddle.net/ambiguous/8c7ch/)做同样的事情.如果你想复制那么你想要使用`_.map`和`_.extend({},element,{married:false})`. (3认同)

Jan*_*ara 16

我使用ES6语法.我想这会对你有所帮助.

var arr = [{name: 'a', age: 23}, {name: 'b', age: 24}];    
arr.map((element) => {
   return element.married = false;
});
console.log(arr); // [{name: 'a', age: 23, married : false}, {name: 'b', age: 24, married : false}] 
Run Code Online (Sandbox Code Playgroud)

  • `arr.map()`的目的是返回一个新数组.在这里你没有返回一个新的数组,你正在改变`arr` ...所以为什么不使用arr.forEach()呢?`arr.forEach((element)=> {element.married = false})` (7认同)

Mau*_*ijk 9

使用lodash和ES6箭头表示法解决方案可能变得非常短:

const newArr = _.map(arr, o => _.extend({married: false}, o));
Run Code Online (Sandbox Code Playgroud)

注意:我使用该对象{married: false}作为第一个参数,因为改变此对象会使原始数组保持原样.然而,这意味着它married成为结果对象中的第一个字段,但这可能不相关.


mfi*_*ink 6

带有MapSpread 的ES6

const arr = [{name: 'a', age: 23}, {name: 'b', age: 24}, {name: 'c', age: 25}];
const newArr = arr.map(el => ({ ...el, married: false }));

console.log(newArr);  
// [{age: 23, married: false, name: 'a'}, {age: 24, married: false, name: 'b'}, {name: 'c', age: 25, married: false}]
Run Code Online (Sandbox Code Playgroud)


注意:返回对象字面量的箭头函数需要用括号将对象包裹起来,例如, () => ({})