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?
Если нет - возможно добавление?

Благодаря,

Ответы

Ответ 1

Вероятно, вы хотите 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); });   
}

Ответ 2

Я использую синтаксис 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}] 

Ответ 3

Используя нотацию lodash и ES6, решение может стать довольно коротким:

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

Примечание. Я использую объект {married: false} как первый аргумент, так как мутация этого объекта оставляет исходный массив неповрежденным. Это означает, однако, что married становится первым полем в результирующем объекте, но это, вероятно, не имеет значения.

Ответ 4

Функция lodash имеет самое близкое к тому, что вы хотите, это слияние: http://lodash.com/docs#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});

Тогда слияние будет работать так же, как concat.

Ответ 5

Это происходит поздно, и это не связано с lodash, но я думаю, что самое чистое решение, если вы хотите, чтобы старые данные изменялись, - это использовать классическую для итерации цикла. Таким образом, вы не будете загружать память с помощью нового массива.