【问题标题】:Update existing value of a key in a hash in javascript/angularjs更新 javascript/angularjs 中散列中键的现有值
【发布时间】:2017-04-20 19:08:31
【问题描述】:

每当用户单击前端的星号时,我都会在具有两个键 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 个元素。

谢谢

【问题讨论】:

  • 那么问题是什么?
  • 我的问题是我如何只保留一个与 1 个特定 question_id 相对应的评级,现在发生的是它正在更新当前值以及插入新值。我不希望它插入新值,只需更新与该特定键对应的值(如果存在),否则将其插入数组中。

标签: javascript angularjs arrays rating-system


【解决方案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});) 到数组两次,然后到达第三个索引中的匹配对象并更新其评级。

【讨论】:

  • 我认为你是对的,Ken,但是我该如何解决它,有什么建议吗?
  • @VibhooMishra 您可以在 foreach 循环之前使用设置为 false 的布尔值,而不是在 foreach 循环中使用 else 语句。然后在 foreach 循环中,如果找到问题,则将布尔值设置为 true。然后在 foreach 循环之后,检查是否找到了问题,如果没有,将问题推送到您的数组中。这里以一些更新的代码为例,pastebin.com/1vh9YwDD Edit: updated with pastebin
【解决方案2】:

为什么要使用数组?而是使用如下所示的对象:

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

有了这个,您可以轻松访问您的问题而无需循环。

【讨论】:

    【解决方案3】:

    我这样做只是为了更新现有值,因为我只需要 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});
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 2011-08-15
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多