web-dev-qa-db-fra.com

Lodash: comment ajouter un nouveau champ à toutes les valeurs de la collection

Exemple:

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

Je cherche quelque chose pour faire ça. Remarque, améliorer n'est pas présent dans lodash. Est-il possible de le faire avec lodash?
Sinon - ajout possible?

Merci,

34
sowdri

Vous voulez probablement extendeach de vos objets.

mu est trop court pour tuer mon jeu de mots tout en faisant un excellent point. Mis à jour pour créer un tout nouveau tableau.

var arr = [{name: 'a', age: 23}, {name: 'b', age: 24}];

var newArr = _.map(arr, function(element) { 
     return _.extend({}, element, {married: false});
});

Si vous souhaitez l'ajouter à la bibliothèque,

_.enhance = function(list, source) {
    return _.map(list, function(element) { return _.extend({}, element, source); });   
}
52
Mathletics

J'utilise la syntaxe ES6. Je pense que cela vous aidera.

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

En utilisant lodash et la notation fléchée ES6, la solution peut devenir assez courte:

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

Remarque: j'utilise l'objet {married: false} comme premier argument depuis la mutation de cet objet laisse le tableau d'origine intact. Cela signifie cependant que married devient le premier champ de l'objet résultant, mais cela n'est probablement pas pertinent.

9
Maurits Rijk

ES6 avec Map et Spread

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


Remarque: les fonctions fléchées qui conservent un objet littéral doivent envelopper l'objet entre parenthèses, par exemple, () => ({})

3
mfink

La fonction lodash la plus proche de ce que vous voulez est la fusion: http://lodash.com/docs#merge

La seule légère différence entre le fonctionnement de la fusion et ce que vous voulez faire est que vous devez avoir un tableau de longueur égale pour arranger tout ce qui ressemble:

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

Si vous essayez de faire:

var newArr = _.merge(arr, {married : false});

La fusion fonctionnera alors comme concat.

1
dbriggs