2017-05-15 4 views
0

i ont ce genre de tableau d'arbre, voici les données réelles de mon tableau https://pastebin.com/xtfpyKiEcomment somme enfants valeur tableau parent sequently

il y a id, id_parent, et la valeur de chaque élément,

id:1, 
name:A, 
value:0 
    | 
    ----id:2 
     parent:1, 
     name:B, 
     value : 10 
     | 
     ------id:3, 
       parent:2, 
       name :C, 
       value : 12 
        | 
        ------id:4, 
         parent:3, 
         name :D, 
         value : 14 

comment résumer la valeur par ID parent, de l'enfant en bas au parent haut,

donc je peux obtenir la valeur de A: 36, valeur de B: 36, valeur de C: 26,

merci,

+2

votre "image ascii" ne montre pas comment le "lien" du parent à l'enfant est mis en œuvre (l'enfant au parent, oui, butwhat fait le | et ------ représente?) il n'y a également aucune évidence d'un tableau (ou «tableau d'arbre») - il ressemble réellement plus à une liste liée, sans aucun lien vers l'avant - ainsi ... c'est une information vraiment inutile –

+0

ceci serait plus commode pour répondre si vous avez montré les données en utilisant la syntaxe standard des tableaux JS et des objets (car cela rendrait le mécanisme de lien parent-enfant plus clair, et nous pourrions ensuite copier les données dans nos réponses pour les utiliser dans les démos). @JaromandaX - L'attribut 'parent' (s'il est présent) ne spécifie-t-il pas le' id' du parent de chaque élément? Je suppose que c'est un tableau plat d'objets liés uniquement par des valeurs de données, pas par des références d'objet (mais je ne vais pas essayer de répondre en fonction de cette supposition). – nnnnnn

+0

salut im désolé, je pense qu'il serait plus facile à comprendre pour utiliser cela, laissez-moi éditer ma question et attacher mon tableau réel là-dessus, voici les données réelles https://pastebin.com/xtfpyKiE –

Répondre

0

Vous pouvez utiliser l'affectation déstructurant pour obtenir des propriétés imbriquées d'objets et attribuer des valeurs récupérées à un tableau dans l'ordre. Utilisez une boucle à .splice() deux éléments à la fois de tableau pour créer l'objet ayant A:36,B:36,C:26 paires, repousser l'objet à tableau.

const data = {id:1, name:"A", value:0 
 
      , parent:{id:2, name: "B", value: 10 
 
       , parent:{id:3, name: "C", value: 12 
 
       , parent:{id:4, name: "D", value: 14} 
 
       } 
 
       } 
 
      }; 
 

 
let res = []; 
 

 
({name:res[res.length], value:res[res.length] 
 
, parent:{ 
 
    name:res[res.length], value:res[res.length] 
 
    , parent:{ 
 
     name:res[res.length], value:res[res.length] 
 
     , parent:{ 
 
      name:res[res.length], value:res[res.length]}}}} = data); 
 

 
let k = res.length/2; 
 

 
while (res.length > k) { 
 
    let [key, prop] = res.splice(0, 2); 
 
    res.push({[key]:prop 
 
        + (res[1] && !isNaN(res[1]) && res[1] || 0) 
 
        + (res[3] && !isNaN(res[3]) && res[3] || 0) 
 
        + (res[5] && !isNaN(res[5]) && res[5] || 0) 
 
     }); 
 
} 
 

 
// A : 36, value of B : 36, value of C : 26 
 

 
console.log(res)

+0

salut, merci pour le répondre, j'ai édité ma question et ajouter mes données de tableau réelles là-dessus, pourriez-vous s'il vous plaît me donner un code d'extrait basé sur cela? –