2017-10-22 17 views
0

javascriptの評価ベースのTo-doアプリの基本プロトタイプを作成しています。私はタスク名とその評価を保存するために使用しているオブジェクトがあります。例:オブジェクトの配列(JavaScript)の最後のオブジェクトの属性を読み取ることができません

taskDetails = [ 
    {name: "C", rating: 69.3425}, 
    {name: "A", rating: 60.93875}, 
    {name: "D", rating: 57.32, 
    {name: "B", rating: 59.795} 
] 

そしてすべてのドスが同じ評価を持っているか、いない場合は機能checkAllEqual()

var checkAllEqual = function(){ 
    var flag = true; 
    var temp = [];  
    for(var i = 0; taskDetails.length; i++){ 
     if(taskDetails[i].rating){  //Line no. 58 of the code 
      var rating = taskDetails[i].rating; 
      temp.push(parseInt(rating.toFixed(2))); 
     } 
    } 

    console.log(temp); 
    return flag; 
} 

この機能のチェックがあります。 3回反復するまでうまく動作しますが、最後の1つでは、括弧が正しい値を保持していても、 'rating'が内部であっても 'rating'が定義されていないというエラーがスローされます。 (デバッガでチェック)

私は理由を見つけることができませんでした。助けてください。

エラー:

app.js:58 Uncaught TypeError: Cannot read property 'rating' of undefined 
    at checkAllEqual (app.js:58) 
    at <anonymous>:1:1 
+0

にあなたはその構文は非常に有用である –

+0

、このようなタイプミスを防ぐために、 '(taskDetailsのconstのtaskDetail)のための'ループを使用することができます...ありがとう! –

答えて

1

はあなたのループ条件はただtaskDetails.lengthあり、そのためには、右のあなたの配列の末尾から走る無限ループです。あなたはi < taskDetails.lengthが欲しい。

+0

おっと!愚かな私:P –

0

変更ループの条件 i < taskDetails.length