每当用户点击前端的星号时,我就会在一个包含两个键question_id
和rating
的数组中插入一个对象。如果用户更改任何星号的等级然后更新现有键的值(如果存在),我要查找的内容,否则将该条目推送到阵列。
下面的代码示例
$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个元素。
由于
答案 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});
}