J'essaie de trouver la position exacte et d'accéder à toutes les propriétés de la matrice super imbriquée d'objets.
Je suis en difficulté pour créer une fonction où si je donne un numéro d'index comme paramètre d'entrée, cela devrait me donner la position de la matrice et accéder également à toutes les propriétés en retour. P>
Voici le tableau d'échantillons d'objet P>
p>
{
"name": "branch 1",
"index": 1,
"children": [{
"name": "sub child 1",
"index": 2,
"children": [{
"name": "subx2 child 1",
"index": 3,
"children": [{
"name": "subx3 child 1",
"index": 4,
"children": [{
"name": "subx4 child 1",
"index": 21
},
{
"name": "subx4 child 2",
"index": 18
}
]
},
{
"name": "subx3 child 2",
"index": 6,
"children": [{
"name": "subx4 child 1",
"index": 7
},
{
"name": "subx4 child 2",
"index": 21
}
]
},
{
"name": "subx3 child 3",
"index": 22
}
]
}]
},
{
"name": "sub child 2",
"index": 28
}
]
}
3 Réponses :
Vous pouvez utiliser la récursion et vérifier si p> enfants code> de l'élément existe utiliser
pour code> en boucle à itérer à tous les enfants code> et appliquer de manière récursive le Fonction de chaque enfant
const obj = {
"name": "branch 1",
"index": 1,
"children": [{
"name": "sub child 1",
"index": 2,
"children": [{
"name": "subx2 child 1",
"index": 3,
"children": [{
"name": "subx3 child 1",
"index": 4,
"children": [{
"name": "subx4 child 1",
"index": 21
},
{
"name": "subx4 child 2",
"index": 18
}
]
},
{
"name": "subx3 child 2",
"index": 6,
"children": [{
"name": "subx4 child 1",
"index": 7
},
{
"name": "subx4 child 2",
"index": 21
}
]
},
{
"name": "subx3 child 3",
"index": 22
}
]
}]
},
{
"name": "sub child 2",
"index": 28
}
]
}
function find(obj,index){
if(obj.children){
for(let i = 0;i<obj.children.length;i++){
let x = find(obj.children[i],index);
if(x) return {...x,pos:i};
}
}
return obj.index === index ? obj : false;
}
console.log(find(obj,21))
Merci pour l'aide. Juste une question ici comment puis-je connaître la position de l'index où elle est présente comme pour 22 cela pourrait être obj.children [0]. Children [0]. Children [2].
Si j'ai eu votre question correctement, vous pouvez faire quelque chose comme ceci:
const func=(obj,index, nested=0)=>{ return Obj.index===index ? {obj, nested} : func(obj.children,index, nested+1) }
Vous pouvez récupérer les index dans les matrices code> enfants code> qui conduisent à l'index cible:
p>
function findIndexNested(data, index) { if (data.index === index) return []; let result; const i = (data.children || []).findIndex(child => { return result = findIndexNested(child, index) }); if (result) return [i, ...result]; } function findByPath(data, path) { for (let i of path) data = data.children[i]; return data } // Sample data const data = {"name": "branch 1","index": 1,"children": [{"name": "sub child 1","index": 2,"children": [{"name": "subx2 child 1","index": 3,"children": [{"name": "subx3 child 1","index": 4,"children": [{"name": "subx4 child 1","index": 21},{"name": "subx4 child 2","index": 18}]},{"name": "subx3 child 2","index": 6,"children": [{"name": "subx4 child 1","index": 7},{"name": "subx4 child 2","index": 21}]},{"name": "subx3 child 3","index": 22}]}]},{"name": "sub child 2","index": 28}]} const index = 22 const result = findIndexNested(data, index); console.log("Found index " + index + " via these child indexes: " + result); console.log("The object is", findByPath(data, result));
Merci, @Trincot pour l'aide! J'apprécie vraiment cela.
Comment puis-je former obj.children [0] .children [0 ].children [2] code> du retour de la matrice [0,0,2]?
Vous voulez dire, comme une chaîne?
Oui, comme je veux le stocker dans la variable comme var properties = obj.children [0]. Children [0]. Children [2] code>. Si vous pouvez, aidez-moi s'il vous plaît
Attendez, ce n'est pas une chaîne. Vous voulez dire var properties = "obj.children [0]. Children [0]. Children [2]" " code>?
désolé je ne veux pas dire chaîne, je veux comme ça var properties = obj.children [0 ].children [0] .children [2] code> Pouvez-vous aider?
désolé je ne veux pas dire chaîne, je veux comme ça var properties = obj.children [0 ].children [0] .children [2] code> Pouvez-vous aider?
Mais c'est une référence simple à l'objet enfant. Vous auriez juste code> Propriétés CODE> pointant sur l'objet le plus profond sans suivre comment s'y rendre. Si obj.children [0] .children [0]. Children [2] code> n'est pas une chaîne, alors vous n'avez pas le chemin, juste la référence de l'objet.
Peut-être que vous voulez avoir une fonction qui retournera cet objet enfant lorsque vous le transmettez un tableau comme [0, 0, 2]?
Oui @Trincot Monsieur, c'est exactement ce que je cherche! :) Est-ce possible?
Ajouté à ma réponse.
"Cela devrait me donner sa position dans le tableau et accéder à toutes les propriétés en retour" i>: veuillez fournir un exemple concret d'entrée et de sortie attendue.
Par exemple, mon nom de fonction est FindChildIndex (Indexnnumber), par exemple, si 22 Il devrait me renvoyer, c'est la position renvoie-moi ces enfants [0]. Children [2].
Je pense que vous devez vous demander pourquoi ces données sont structurées comme ceci. Les données plates sont meilleures pour JSON.
@JOelloyd Cette donnée est utilisée pour npmjs.com/package/react-d3-treee A> alors je ne peux pas m'empêcher! :(