37

例子:

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 做到这一点吗?
如果没有 - 可能的添加?

谢谢,

4

6 回答 6

54

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

mu 太短了,有点扼杀了我的文字游戏,同时提出了一个很好的观点。更新以创建一个全新的数组。

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); });   
}
于 2013-11-14T01:29:35.663 回答
15

我使用 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}] 
于 2017-03-17T08:00:58.620 回答
13

使用lodash和 ES6 箭头符号,解决方案可以变得很短:

const newArr = _.map(arr, o => _.extend({married: false}, o));

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

于 2017-03-17T11:50:12.337 回答
6

ES6 与MapSpread

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}]


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

于 2019-02-07T18:32:21.573 回答
1

lodash 最接近您想要的功能是合并:http ://lodash.com/docs#merge

合并的工作方式与您想要做的唯一细微的区别是您需要一个长度相等的数组来 arr all 看起来像:

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});

然后合并将像 concat 一样工作。

于 2013-11-28T00:10:04.467 回答
-3

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

于 2016-03-25T10:01:34.313 回答