2016-10-24 8 views
-1

名前、競合番号 `(1,2,3)、複数のドライバの終了位置を持つオブジェクトがあります。私は各アレイを繰り返し、競技番号、終了位置、そして各ドライバーの平均的なフィニッシング位置を表示します(console.logは正常です)。 Object複数のオブジェクトを複数の配列で合計して平均した合計

var obj = { 
 
    "drivers": [{ 
 
    "Name": "Smith", 
 
    "races": [{ 
 
     "race 1": "12" 
 
    }, { 
 
     "race 2": "6" 
 
    }, { 
 
     "race 3": "10" 
 
    }] 
 
    }, { 
 
    "Name": "Jones", 
 
    "races": [{ 
 
     "race 1": "11" 
 
    }, { 
 
     "race 2": "6" 
 
    }, { 
 
     "race 3": "5" 
 
    }] 
 
    }] 
 
}; 
 
obj.drivers.forEach(function(el) { 
 
    console.log(el.Name + ':'); 
 
    var total = 0; 
 
    el.races.forEach(function(race) { 
 
    var key = Object.keys(race)[0]; 
 
    total += +race[key]; 
 
    console.log(key + ' finishing position :' + race[key]); 
 
    }); 
 
    console.log('Average finishing position :' + total/el.races.length); 
 
});
のキーを取得するために array 使用 Object.keys()を反復処理する

Smith: 
    Race 1 finishing position: 12 
    Race 2 finishing position: 6 
    Race 3 finishing position: 10 
    Average finishing position: 9.3 

    Jones: 
    Race 1 finishing position: 11 
    Race 2 finishing position: 6 
    Race 3 finishing position: 5 
    Average finishing position: 7.3 
+2

与えられた:あなたはPLAを参照するときJSONについて話をしないでくださいこの場合のように、通常のJavascriptオブジェクトを使用します。 JSONはシリアル化形式です。あなたがここで働いているものではありません。あなたの努力をこれまでに示してください。あなたはあなたがしなければならないことを概説しています。あなたがどこにいるのか教えてください。 (そうでなければ、これは "私のためにこのコードを書いてください"というタイプの質問です。通常はここで下線を引いています) – Tomalak

+0

@TomalakどのようにJSONでないのですか? – Keith

+0

JavaScript Object Notation。 (JSON)は、データの保存と交換のための構文です。 – Weedoze

答えて

0

私はちょうどループそれと全く使用Object.keys()

var data = { 
 
     "drivers":[ 
 
     { 
 
      "Name":"Smith", 
 
       "races": [ 
 
       { 
 
        "race 1":"12" 
 
       }, 
 
       { 
 
        "race 2":"6" 
 
       }, 
 
       { 
 
        "race 3":"10" 
 
       } 
 
      ] 
 
     }, 
 
     { 
 
      "Name":"Jones", 
 
       "races": [ 
 
       { 
 
        "race 1":"11" 
 
       }, 
 
       { 
 
        "race 2":"6" 
 
       }, 
 
       { 
 
        "race 3":"5" 
 
       } 
 
       ] 
 
      } 
 
     ] 
 
    }; 
 

 

 
    for(var x in data.drivers) { 
 
     console.log(data.drivers[x].Name + ":"); 
 
     var total = 0; 
 
     for(var i in data.drivers[x].races) { 
 
      var key = Object.keys(data.drivers[x].races[i]); 
 
      total += parseInt(data.drivers[x].races[i][key]); 
 
      console.log(key+ " finishing: "+data.drivers[x].races[i][key]); 
 
     } 
 
     console.log('Average finishing position: ' + (total/3).toFixed(1)); 
 
    }

+0

これは完璧です。ありがとうNewbee Dev!私がやったことを私が見せてくれることを望んでいた@Tomalakに答えて、まあ、私は近くにいませんでした。これは私のための学習経験です - おそらく私の頭の上のこの時点で、しかし、Newbee Devがやっていること/私を示してくれたことは驚くほど助けになります!これがJSONかどうかについての面白い議論もあります。私はそれがもう一度だと信じて、私は初心者です。 ;) –

+0

オブジェクトデリファレンスとnewbeeでnewbeeの繰り返しがたくさんある場合-1(配列のインデックスではなく、プロパティの反復に使用されるはずです) – Alnitak

+0

もし可能ならば各リストに3つのレースがあるというハードコーディングの仮定のために、 – Alnitak

3

使用Array#forEach

{ 
"drivers":[ 
    { 
     "Name":"Smith", 
      "races": [ 
      { 
       "race 1":"12" 
      }, 
      { 
       "race 2":"6" 
      }, 
      { 
       "race 3":"10" 
      } 
     ] 
    }, 
    { 
     "Name":"Jones", 
      "races": [ 
      { 
       "race 1":"11" 
      }, 
      { 
       "race 2":"6" 
      }, 
      { 
       "race 3":"5" 
      } 
      ] 
     } 
    ] 
} 

出力:以下

は、データと所望の出力であります

0

この1は、任意のユーザーの数とJSONオブジェクトでのレースへの一般的であるが、レースを取得しないようにFYI

jsonObj.drivers.forEach(function(obj) { var len = obj.races.length; console.log(obj.Name+":"); var avrg = 0 for(var j=0;j<obj.races.length;j++){ var x = j+1; var key = "race "+x; var race = parseInt(obj.races[j][key]); avrg +=race; console.log("Race "+(j+1)+" finishing position: "+race); } console.log("Average finishing position: "+(avrg/len).toPrecision(2)); });

関連する問題