我正在尝试将新项目推送到favlist中,我使用for循环检查该项目是否已存在于favlist中。
但是,不是一次按下新项目,而是推送重复数量的新项目。
解决这个问题的最佳方法是什么?
提前致谢!
$scope.favlist = JSON.parse($window.localStorage.getItem("favlist"));
console.log($scope.favlist);
$scope.toggleStar = function(item) {
item.star = !item.star;
console.log(item); //object
var favlistcontent = $window.localStorage.getItem("favlist");
console.log(favlistcontent); //string
if(typeof favlistcontent !== 'string'){
$scope.favlist = [];
$window.localStorage.setItem("favlist",JSON.stringify($scope.favlist));
}
$scope.favlist = JSON.parse($window.localStorage.getItem("favlist"));
console.log($scope.favlist); //object
console.log($scope.favlist.length);
console.log(angular.equals($scope.favlist[0],item)); //true
for(i=0; i<$scope.favlist.length; i++){
if(angular.equals($scope.favlist[i],item)){
console.log("item already exists");
}
else {
$scope.favlist.push(item);
$window.localStorage.setItem("favlist",JSON.stringify($scope.favlist));
}
}
答案 0 :(得分:2)
一旦找到相同的项目,你需要打破循环,否则它将继续并在检查不相等的项目时添加项目。
var duplicate = false;
for (i = 0; i < $scope.favlist.length; i++) {
if (angular.equals($scope.favlist[i], item)) {
console.log("item already exists");
//break loop here
duplicate = true;
break;
}
}
if (!duplicate){
$scope.favlist.push(item);
$window.localStorage.setItem("favlist", JSON.stringify($scope.favlist));
}
答案 1 :(得分:1)
解决此问题的最佳方法是使用:
if($scope.favlist.indexOf(item)==-1){
// item is no duplicate
$scope.favlist.push(item);
$window.localStorage.setItem("favlist", JSON.stringify($scope.favlist));
}
支票看起来更简单。 在一个好的浏览器中,indexOf函数总是比“手动”循环更快。