Lodash:如何将新的字段添加到收藏中的所有值

问题描述 投票:32回答:6

例:

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

谢谢,

javascript underscore.js lodash
6个回答
52
投票

你可能想extend你的对象的each

亩太短排序杀了我的文字游戏,同时使一个很好的点。更新创建一个全新的阵列。

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

15
投票

我用ES6语法。我认为这会帮助到u。

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

9
投票

使用lodash和ES6箭头符号的解决方案可能会变得非常简短:

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

注:我使用的对象{married: false}作为第一个参数,因为改变此对象保持原始数组原封不动。这意味着,但是,这种married成为结果对象的第一场,但是这可能是不相关的。


3
投票

ES6与MapSpread

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

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

注:箭头函数返回一个对象文本需要包装对象与括号,例如,POI qazxsw


1
投票

该功能lodash具有最接近你想要的是合并:() => ({})

如何与合并工作的,你想要做什么是你需要有相等长度的数组arr中所有看起来像只有细微的差别:

http://lodash.com/docs#merge

如果你尝试这样做:

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

然后合并将工作就像CONCAT。


-2
投票

这来得太迟了,它不涉及lodash,但我认为最干净的解决方案,如果你想可变旧数据是用于循环迭代的经典。这样,你会不会有新的阵列加载内存。

© www.soinside.com 2019 - 2024. All rights reserved.