2017-04-20 5 views
0

私はフロントエンドの星をクリックするたびにquestion_idratingという2つのキーを持つ配列にオブジェクトを挿入します。ユーザーが星のいずれかのレーティングを変更して既存のキーの値を更新する場合はそれを探し、それ以外の場合は配列にエントリをプッシュします。javascript/angularjsのハッシュのキーの既存の値を更新します

$scope.yellowPages = [] // is defined

if ($scope.yellowPages.length > 1) { 
    for (var i = 0 ; i < $scope.yellowPages.length; i++) { 
     if ($scope.yellowPages[i]["question_id"] == question_id) { 
      $scope.yellowPages[i]["rating"] = rating; // here updating the existing value of key, but what is happening it's updates and as well as creates a new entry with the updated value. 
     } 
     else{ 
     $scope.yellowPages.push({rating: rating, question_id: question_id}); 
     } // if not present 
    } 
    } 
    else{ 
    $scope.yellowPages.push({rating: rating, question_id: question_id}); // for 1st time 
    } 
} 

以下

コードサンプルは私の究極の目標はquestion_id'sユニークでありrating、配列べき唯一の5つの要素を持つことです。

ありがとうございました

+1

それでは、 – gforce301

+0

私の質問は、1つの特定のquestion_idに対応する評価を1つだけ保持する方法です。現状では、現在の値を更新するだけでなく、新しい値を挿入することもあります。新しい値を挿入したくない場合は、存在する場合は特定のキーに対応する値を更新するか、配列に挿入します。 –

答えて

1

forループのif/elseと関係があります。 forloop反復における現在の要素が同じ質問である場合は、チェックされています

if ($scope.yellowPages[i]["question_id"] == question_id) { 

それがない場合は、配列に項目を推進している。

$scope.yellowPages.push({rating: rating, question_id: question_id}); 

これは、のすべての反復のために起こりますループ。たとえば、配列に3つのアイテムがあり、一致する質問IDが3番目のアイテムである場合、新しいオブジェクト($ scope.yellowPages.push({rating:rating、question_id:question_id});)を第3のインデックスの一致するオブジェクトに到達する前に2度配列し、そのレーティングを更新する。

+0

私はあなたが正しいケンだと思うが、どのように修正すればよいだろう? –

+1

@VibhooMishra foreachループでelseステートメントを使用する代わりに、foreachループの前にブール値をfalseに設定することができます。 foreachループ内で、質問が見つかった場合は、ブール値をtrueに設定します。次に、foreachループの後で、質問が見つかったかどうかをチェックし、見つからなかった場合は質問を配列にプッシュします。 例としていくつかの更新されたコードがあります。https://pastebin.com/1vh9YwDD 編集:pastebinで更新 – Ken

0

なぜあなたは配列を使用していますか?代わりに、次のようなオブジェクトを使用してください:

$scope.yellowPages = { 
    "question_id1": "rating1", 
    "question_id2": "rating2" 
} 

これでループすることなく簡単に質問にアクセスできます。

0

私は5つの値が配列に存在する必要があるので、既存の値を更新するだけです。したがって、5つの初期値が挿入された後にのみチェックします。しかし、これはそれを達成するための最適な方法ではないと思うが、これは私の問題を解決し、他の助けを歓迎します

if ($scope.yellowPages.length >= 5) { 
    for (var i = 0 ; i < $scope.yellowPages.length; i++) { 
     if ($scope.yellowPages[i]["question_id"] == question_id) { 
     $scope.yellowPages[i]["rating"] = rating; 
     } 
    } 
    } 
    else{ 
    $scope.yellowPages.push({rating: rating, question_id: question_id}); 
    } 
関連する問題