-1
votes

Comment grouper une clé d'objet dans un tableau imbriqué des objets?

J'ai une gamme imbriquée d'objets et je souhaite grouper l'identifiant de groupe et former un nouveau tableau. Voici mon tableau:

result = [
  comapny_6: [
    {
      name: 'a',
      age: 10,
      desc: 'test1'
    },
  ],
  comapny_10: [
    {
      name: 'a',
      age: 10,
      desc: 'testa'
    },
    {
      name: 'c',
      age: 40,
      desc: 'test3'
    }
  ],

  company_30 :[
    {
      name: 'b',
      age: 20,
      desc: 'test2'
    },
    {
      name: 'c',
      age: 40,
      desc: 'testc'
    }
  ]
]


8 commentaires

Votre matrice souhaitée n'est pas valide.


Le résultat souhaité devrait être un objet.


Qu'est-ce que tu as essayé jusque-là? Nous serions heureux de regarder tout ce que vous avez tenté et vous donniez des commentaires sur la manière de l'améliorer.


Peut-être que vous souhaitez un tableau d'objets de société: Résultat: [{Company_x: [...]}, {Company_x: [...]} ...]


@Jonaswilms c'est juste pseudo code.


@MaHeeerali comme j'ai dit que la structure de données finale peut être n'importe quoi, un objet ou une matrice.


@talemyn Jusqu'à présent, je viens d'aplati tout le tableau, puis de former mon propre objet qui est une façon de le faire.


@pogbamessi j'ai répondu à la question. S'il te plaît vérifie le


3 Réponses :


1
votes

Vous pouvez utiliser réduire code> pour boucle à travers la matrice et construire la sortie d'objet souhaitée. Utilisez foreach code> à la boucle Thru société code>

p>

var mainArray = [{"name":"a","age":10,"company":[{"desc":"test1","id":6},{"desc":"testa","id":10}]},{"name":"b","age":20,"company":[{"desc":"test2","id":30}]},{"name":"c","age":40,"company":[{"desc":"test3","id":10},{"desc":"testc","id":30}]}];

var result = mainArray.reduce((c, {name,age,company}) => {
  company.forEach(({id,desc}) => (c["company_" + id] = c["company_" + id] || []).push({name,age,desc}));
  return c;
}, {});

console.log(result);


0 commentaires

1
votes

Vous pouvez d'abord créer un tableau 1D à l'aide de Flatmap () CODE>, puis utilisez Réduire () CODE> Pour grouper

P>

const res = flat.reduce((ac,{id,...rest}) => {
    //check if company id doesnot exist as key in ac then set it empty array
    if(!ac[`company_${id}`]) ac[`company_${id}`] = [];
    //push rest(which will be an object with all the keys expect id)
    ac[`company_${id}`].push(rest)
    //at last return ac
    return ac;
})


3 commentaires

Merci pour votre réponse. J'apprécie vraiment cela. Qu'est-ce que cette ligne fait? Je veux dire que je sais quel est le but, mais il est difficile de suivre la syntaxe. (AC [< société _ $ {id} ] || (AC [ société _ $ {id} ] = [])). Poussez (repos), AC)


@pogbamessi j'ai ajouté une explication. Vérifie ça. Si vous ne comprenez rien, n'hésitez pas à demander.


Merci beaucoup pour l'explication détaillée. J'apprécie vraiment cela. L'opérateur des virgules me jetait comme je ne l'ai jamais utilisé auparavant.



0
votes

Vous pouvez y parvenir avec Array. Réduire et à l'intérieur avec un Array.foreach sur la gamme de sociétés comme celle-ci:

p>

let data = [ { name: 'a',age: 10, company: [ { desc: 'test1' , id: 6 }, { desc: 'testa' , id: 10 }] }, { name: 'b',age: 20, company: [ { desc: 'test2' , id: 30 }] }, { name: 'c',age: 40, company: [ { desc: 'test3' , id: 10 }, { desc: 'testc' , id: 30 }] } ] 

let result = data.reduce((r,{ name, age, company }) => {
  company.forEach(({ id, desc }) => 
   r[`company_${id}`] = (r[`company_${id}`] || []).concat({ name, age, desc }))
  return r
}, {})

console.log(result)


0 commentaires