在javascript / angularjs中更新散列中键的现有值

时间:2017-04-20 19:08:31

标签: javascript angularjs arrays rating-system

每当用户点击前端的星号时,我就会在一个包含两个键question_idrating的数组中插入一个对象。如果用户更改任何星号的等级然后更新现有键的值(如果存在),我要查找的内容,否则将该条目推送到阵列。

下面的代码示例

$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'srating,数组应该只有5个元素。

由于

3 个答案:

答案 0 :(得分:1)

它与for循环中的if / else有关。您正在检查forloop迭代中的当前元素是否是同一个问题:

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

如果不是,则将项目推入数组:

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

这发生在循环的每次迭代中。因此,例如,如果数组中有3个项目,并且匹配的问题ID是第三个项目,则会将新对象($ scope.yellowPages.push({rating:rating,question_id:question_id});)推送到数组在到达第三个索引中的匹配对象之前两次并更新其评级。

答案 1 :(得分:0)

你为什么要使用数组?而是使用看起来像这样的对象:

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

通过这种方式,您可以轻松访问您的问题而无需循环播放。

答案 2 :(得分: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});
  }