-1
votes

Fusionner des propriétés spécifiques des objets avec JavaScript

J'ai donc une gamme d'objets comme:

{
   name: "Joe Smith",
   job: "Custodian, Chef, Pilot",
   age: 35,
   id: "3421"
}


0 commentaires

3 Réponses :


3
votes

En utilisant Réduire code> à itérer via la matrice pour en créer un nouveau et simplement vérifier si l'ID est déjà inséré, puis concaténate le travail insérez le nouvel objet:

p>

const arr = [
  { name: "Joe Smith", job: "Janitor", age: 35, id: "3421" },
  { name: "George Henderson", job: "CEO", age: 43, id: "5098" },
  { name: "Joe Smith", job: "Cook", age: 35, id: "3421" },
  { name: "Sam Doe", job: "Technician", age: 22, id: "1538" },
  { name: "Joe Smith", job: "Dishwasher", age: 35, id: "3421" } 
]

const result = arr.reduce((acc, cur) => {
    const duplicate = acc.find(e => e.id == cur.id)
    
    if (duplicate) {
	duplicate.job += ', ' + cur.job
    } else {
	acc.push(cur)
    }

    return acc
}, [])

console.log(result)


2 commentaires

Vous étiez plus rapide que moi, alors j'ai supprimé ma réponse, j'ai eu une réponse similaire. J'aime réduire à cette fin.


Merci beaucoup!



1
votes

Je suggérerais d'utiliser une carte temporaire code>, afin d'éviter d'avoir à itérer chaque fois que le nom est un duplicata (comme avec trouver code>).

En outre, il semble une meilleure pratique de laisser les multiples valeurs de de travail code> être placée dans un tableau: p>

p>

let data = [{name: "Joe Smith",job: "Janitor",age: 35,id: "3421"},{name: "George Henderson",job: "CEO",age: 43,id: "5098"},{name: "Joe Smith",job: "Cook",age: 35,id: "3421"},{name: "Sam Doe",job: "Technician",age: 22,id: "1538"},{name: "Joe Smith",job: "Dishwasher",age: 35,id: "3421"}];

let map = new Map(data.map(({name, job, age, id}) => [id, { name, job: [], age, id}]));
data.forEach(o => map.get(o.id).job.push(o.job));
let result = Array.from(map.values());

console.log(result);


0 commentaires

2
votes

avec Lodash, vous pouvez regrouper le tableau et cartographier les propriétés recherchées.

p>

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>


5 commentaires

C'est génial aussi. Je pense que je pourrais l'utiliser parce que j'utilise également Lodash pour d'autres parties de mon projet.


Cette méthode a un effet secondaire, il change l'ordre de la matrice


Dans le résultat, je vois sam doe , joe smith , george henderson , où dans le tableau, ils sont définis dans l'ordre Joe Smith , George Henderson et Sam DOE


Ça commande le résultat par les identifiants


Mais ça va. Je trie les résultats quand même