2017-02-01 21 views
-4

を使用してキーを追加します。私はこのJSONを持ってrecurssive

{ 
    "my_obj": [ 
     { 
      "qte": [ 
       { 
        "qte1": "2", 
        "somthing": "toto" 
       }, 
       { 
        "qte1": "1", 
        "somthing": "tata" 
       } 
      ]  
     }, 
     { 
      "qte": [ 
       { 
        "qte1": "77" 
       }, 
       { 
        "somthing": "titi" 
       } 
      ]  
     } 
    ] 
} 

私は再帰またはそれを行う、いくつかの機能のnodeJsを使用してすべてのキー「qte1」を追加する必要があるとのようなものを得る:

{ 
    "sumQte" : 80 

} 

をお待ちください

+1

これはかなり単純です。これまでに何を試しましたか? – shriek

+0

私は再帰を使ってやろうとしました –

+0

あなたの入力と希望する出力の正確な例**を提供するために質問コードを再フォーマットできますか?私はあなたがしようとしていることが現時点では分かりません。 – JonSG

答えて

1

あなたのこの問題を解決する方法はたくさんあります。これはおそらく最適ではない..です実際のデータがオブジェクトである場合

const test = { 
     "my_obj": [ 
      { 
       "qte": [ 
        { 
         "qte1": "2", 
         "somthing": "toto" 
        }, 
        { 
         "qte1": "1", 
         "somthing": "tata" 
        } 
       ] 
      }, 
      { 
       "qte": [ 
        { 
         "qte1": "77" 
        }, 
        { 
         "somthing": "titi" 
        } 
       ] 
      } 
     ] 
    }; 
    let sum = 0; 
    test.my_obj.map(obj => { 
    obj.qte.map(obj2 =>{ 
     if(obj2.qte1 != null){ 
     sum+=parseInt(obj2.qte1); 
     } 
    }); 
    }); 
    console.log(sum); 
+0

ありがとう@LordMarty –

1

var obj = {"my_obj":[{"qte":[{"qte1":"2","somthing":"toto"},{"qte1":"1","somthing":"tata"}]},{"qte":[{"qte1":"77"},{"somthing":"titi"}]}]}; 
 

 
function getQte1(obj) { 
 
    if (obj instanceof Array) { // if this is an array 
 
    var sum = 0; 
 
    obj.forEach(function(o) { 
 
     sum += getQte1(o); 
 
    }); 
 
    return sum; 
 
    } 
 

 
    // else it's an object 
 

 
    var sum = 0; 
 
    // if it has the property qte (the array) add the result to sum 
 
    if (obj.qte !== undefined) 
 
    sum += getQte1(obj.qte); 
 
    // if it has the property qte1 (the number) add the result to sum 
 
    if (obj.qte1 !== undefined) 
 
    sum += parseInt(obj.qte1); 
 
    return sum; 
 
} 
 

 
console.log(getQte1(obj.my_obj));

+0

ありがとう@Charuka –

+0

@Charukaの編集では、悪化させないようにコードを強化することになっています。 –

1

あなたはtruthynessのためにいくつかのチェックと、反復や再帰的なアプローチを使用することができたり、キーが見つかった場合や - 関数を再度呼び出します。

これはどんな深さでも機能します。

function getSum(object, key) { 
 
    return Object.keys(object).reduce(function (s, k) { 
 
     if (!object[k]) { 
 
      return s; 
 
     } 
 
     if (k === key) { 
 
      return s + +object[k]; 
 
     } 
 
     if (typeof object[k] === 'object') { 
 
      return s + getSum(object[k], key); 
 
     } 
 
     return s; 
 
    }, 0); 
 

 
}; 
 

 
var data = { my_obj: [{ qte: [{ qte1: "2", somthing: "toto" }, { qte1: "1", somthing: "tata" }] }, { qte: [{ qte1: "77" }, { somthing: "titi" }] }] }, 
 
    sum = getSum(data, 'qte1'); 
 

 
console.log(sum);

+0

ありがとう@Nina Scholz –

関連する問題