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,现在这个方法被称为uxisnewArr
是一个全新的数组,包含全新的对象吗?i、 e.arr
应该保持不变吗?arr.map()
的目的是返回一个新数组。在这里,您没有返回新数组,而是在变异arr
。。。那么为什么不改用arr.forEach()呢arr.forEach((元素)=>{element.married=false})`