2017-04-20 1 views
0

프런트 엔드에서 별을 클릭 할 때마다 question_idrating 두 개의 키가있는 배열에 개체를 삽입합니다. 사용자가 스타의 등급을 변경 한 다음 기존 키의 값을 업데이트하는 경우 (존재하는 경우), 그렇지 않으면 항목을 배열로 푸시합니다.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

내 질문은 하나의 특정 question_id에 해당하는 등급 하나만 유지하는 방법입니다. 현재 일어나고있는 것은 현재 값을 업데이트하는 것뿐 아니라 새로운 값을 삽입하는 것입니다. 새로운 값을 삽입하고 싶지는 않습니다. 존재하는 경우 특정 키에 해당하는 값을 업데이트하거나 배열에 삽입하십시오. –

답변

1

for 루프에서 if/else와 관련이 있습니다. 그렇지 않은 경우

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

, 당신은 배열에 항목을 추진하고있다 :

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

이 모든 반복에 대해 일어나는 forloop 반복 처리의 현재의 요소가 같은 질문 인 경우 당신은 확인된다 루프. 예를 들어 배열에 3 개의 항목이 있고 일치하는 질문 ID가 세 번째 항목 인 경우 새 객체 ($ scope.yellowPages.push ({rating : rating, question_id : question_id}))를 배열을 두 번 세 번 째 색인의 일치 객체에 도달하고 등급을 업데이트하십시오.

+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}); 
    } 
관련 문제