2017-05-15 4 views
0

私はここ 、木の配列のこの種を持っている私の配列の実際のデータ https://pastebin.com/xtfpyKiEは順々

各項目のID、PARENT_ID、および値があり、

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 
トップ親に下の子から親ID、 によって値を合計する方法

ので、私は、の値を取得することができます:36、Bの 値:36、Cの値:26、

は、あなたがオブジェクトのネストされたプロパティを取得し、順番に配列に取得した値を割り当てるために分割代入を使用することができ、

+2

あなたの「アスキー絵は」親から子への「リンク」が実装されている方法を示していない(親の子、イエス、butwhatはありません|と------ ?)また、配列(または "ツリー配列")の証拠もありません。実際にはリンクリストのように見えますが、フォワードリンクはありませんので、実際には役に立たない情報です。 –

+0

これは、標準のJS配列とオブジェクトのリテラル構文を使用してデータを表示しました(親子リンク機構をより明確にするため、データをデモで使用するために回答にコピーできます)。 @JaromandaX - 'parent'属性(存在する場合)は各要素の親の' id'を指定していませんか?私の推測では、オブジェクト参照ではなく、データ値だけでリンクされたオブジェクトのフラットな配列です(しかし、私はその推測に基づいて答えようとはしません)。 – nnnnnn

+0

こんにちは、私はそれを使用することが理解しやすいと思う、私の質問を編集し、実際の配列を添付して、ここには実際のデータですhttps://pastebin.com/xtfpyKiE –

答えて

0

をお願いします。 .splice()にループを使用して配列から一度に2つの要素を作成し、A:36,B:36,C:26ペアを持つオブジェクトを作成し、オブジェクトを配列に戻します。

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

こんにちは、ありがとう答え、私は私の質問を編集し、それに私のスニペットコードを教えてください、私の実際の配列データを追加することができますか? –