J'ai une gamme d'objets:
var r = _.values(_.reduce(test,function (acc, e) { acc[e.name] = {...(acc[e.name] || {}), ...e}; // this line is still in ES6 return acc; },{}));
3 Réponses :
Vous pouvez utiliser p> réduire code> et prendre
objet.values code>. Voici un exemple de travail:
var test = [{name: 'lorem', age: 20, color:'red'}, {name: 'lorem', weight: 1, height:5} , {name: 'hello', ipsum : 'dolor'}];
var result = [...new Set(test.map(({name})=>name))].map(n=>Object.assign(...test.filter(p=>p.name==n)));
console.log(result);
Vous pouvez utiliser la méthode ci-dessous
p>
var test = [ { name: 'lorem', age: 20, color: 'red' }, { name: 'lorem', weight: 1, height: 5 }, { name: 'hello', ipsum: 'dolor' }, ] const finalResult = test.reduce((result, obj) => { if (result[obj.name]) { result[obj.name] = { ...result[obj.name], ...obj, } } else { result[obj.name] = { ...obj } } return result }, {}) console.log(Object.values(finalResult))
Cette fonction fera le tour!
(nom code> est placé au bas de chaque objet, mais cela n'a pas d'importance)
(Pure JS)
P> function mergeList(list) {
var temp = {};
list.forEach(elem => {
var name = elem.name;
delete elem.name;
temp[name] = {
...temp[name],
...elem
}
});
var merged = [];
Object.keys(temp).forEach(key => {
var object = temp[key];
object.name = key;
merged.push(object);
});
return merged;
}
var test = [{
name: 'lorem',
age: 20,
color: 'red'
}, {
name: 'lorem',
weight: 1,
height: 5
}, {
name: 'hello',
ipsum: 'dolor'
}];
console.log(mergeList(test));
Que se passe-t-il s'il y a deux du même nom de propriété?
Est-ce que cela répond à votre question? Fusionner 2 tableaux d'objets
@Hereticmonkey> Si deux biens sont identiques, la propriété doit être réécrite avec la dernière valeur. BTW: le lien que vous fournissez ne résout pas mon problème car je travaille avec un seul tableau