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, но я думаю, что самое чистое решение, если вы хотите, чтобы старые данные изменялись, - это использовать классическую для итерации цикла. Таким образом, вы не будете загружать память с помощью нового массива.