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'
}
]
]
3 Réponses :
Vous pouvez utiliser p> 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> 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);
Vous pouvez d'abord créer un tableau 1D à l'aide de P> Flatmap () CODE>, puis utilisez Réduire () CODE> Pour grouper 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;
})
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} code>] || (AC [ société _ $ {id} code>] = [])). 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.
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)
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