我正在尝试将一个新项目推送到收藏列表中,我使用了一个 for 循环来检查该项目是否已存在于收藏列表中。
但是,不是一次推送新项目,而是推送重复数量的新项目。
解决此问题的最佳方法是什么?
提前致谢!
$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));
}
}
最佳答案
一旦找到相等的项目,您需要打破循环,否则它将继续并在检查到不相等的项目时添加项目。
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));
}
关于javascript - 只推送一个项目而不是推送多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34636006/