0
votes

Fusionner et grouper les propriétés d'objet en JavaScript

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 commentaires

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


3 Réponses :


2
votes

Vous pouvez utiliser réduire code> et prendre objet.values ​​ code>. Voici un exemple de travail:

p>

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


0 commentaires

1
votes

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


0 commentaires

1
votes

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


0 commentaires