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

Javascript Lodash:如何向集合中的所有值添加新字段,javascript,underscore.js,lodash,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}] 我想找点事做。注意,增强在lodash中不存在。 可以用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}]
我想找点事做。注意,增强在lodash中不存在。 可以用lodash来做这件事吗?
如果不是--可能的添加

谢谢,

您可能想要扩展您的每个对象

穆太短了,我的文字游戏被扼杀了,同时提出了一个很好的观点。已更新以创建一个全新的阵列

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

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

如果要将其添加到库中

_.enhance = function(list, source) {
    return _.map(list, function(element) { return _.extend({}, element, source); });   
}

lodash的功能最接近您想要的功能是“合并”:

merge的工作方式与您想要执行的操作之间唯一的细微差别是,您需要一个长度相等的数组来arr所有看起来像:

var arr = [{name: 'a', age: 23}, {name: 'b', age: 24}];
var marriedArr = [{married : false}, {married : false}];
var newArr = _.merge(arr, marriedArr);
console.log(newArr);
如果您尝试执行以下操作:

var newArr = _.merge(arr, {married : false});

然后merge将像concat一样工作。

这来得晚,而且不涉及lodash,但我认为如果您希望旧数据可变,最干净的解决方案是使用经典for循环迭代。这样就不会用新数组加载内存。

我使用ES6语法。我认为这将有助于美国

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

var newArr = _.map(arr, function(element) { 
     return _.extend({}, element, {married: false});
});
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}] 
使用和ES6箭头符号,解决方案可能变得非常简短:

const newArr = _.map(arr, o => _.extend({married: false}, o));
注意:我使用对象
{married:false}
作为第一个参数,因为对该对象进行变异会使原始数组保持不变。但是,这意味着
已婚
将成为结果对象中的第一个字段,但这可能不相关。

ES6与和



注意:返回对象文字的箭头函数需要用括号括住对象,例如,
()=>({})

您正在修改
arr
,lodash的
每个
都将返回
arr
,因此
newArr
具有误导性;您根本不需要
\扩展
,您可以使用
函数(e){e.married=false}
()做同样的事情。如果你想复制,那么你需要使用
.map
.extend({},元素,{marred:false})
@muistooshort极好的点;更新答案。我保留了
extend
,因为我认为这是一个更好的通用解决方案,如果您想添加多个字段,或者已经将扩展保存为对象。(我也很累,所以如果我错过了其他东西,请随意编辑。)谢谢大家!使用回调函数很容易做到这一点。但是,这个问题的目的是检查没有它是否可以做到这一点。如果没有这样的函数,是否值得添加到库中?我不反对回调。它们是天然的。我只是想找一个简写版本的方法。它很有魅力,谢谢@Mathletics,现在这个方法被称为uxis
newArr
是一个全新的数组,包含全新的对象吗?i、 e.
arr
应该保持不变吗?
arr.map()
的目的是返回一个新数组。在这里,您没有返回新数组,而是在变异
arr
。。。那么为什么不改用arr.forEach()呢arr.forEach((元素)=>{element.married=false})`