正在尝试测试数组中是否存在项,并更新数组
Trying to test whether an item exists in the array or not and updating the array
我要做的是:toggleStar是一个函数,用于从JSON对象列表中选择一个项目,并将其添加到另一个列表(即收藏夹列表)
在这里,我尝试过使用indexOf,尽管它似乎不起作用!
任何建议/帮助都将是美妙的!
提前感谢!
$scope.favlist = JSON.parse($window.localStorage.getItem("favlist"));
console.log($scope.favlist);
$scope.toggleStar = function(item) {
item.star = !item.star;
console.log(item);
var favlistcontent = $window.localStorage.getItem("favlist");
if(typeof favlistcontent !== 'string'){
$scope.favlist = [];
$window.localStorage.setItem("favlist",JSON.stringify($scope.favlist));
}
$scope.favlist = JSON.parse($window.localStorage.getItem("favlist"));
if( $scope.favlist.indexOf(item) === -1 ) {
$scope.favlist.push(item);
$window.localStorage.setItem("favlist",JSON.stringify($scope.favlist));
} else if( $scope.favlist.indexOf(item) > -1 ){
console.log("item already exist");
}
}
indexOf()
只有在数组包含相同对象引用时才能工作。
由于您正在搜索的数组只是从json字符串创建的,因此它所包含的与您的项目匹配的对象不是同一个引用。
您需要遍历数组并比较ID或其他唯一标识符,以找到匹配的项目
简单示例:
var arr =[{foo:"bar"}];
var b = {foo:"bar"};
arr.indexOf(b); // -1 since it isn't the same object reference
var arr2 = []
var x= {foo:"bar"};
arr.push(x);
arr.indexOf(x); // 0 since it is the same object reference
此外,您还可以使用angular.equals()
来检查迭代中的匹配,但在进行比较
item.star
相关文章:
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 用于检查数组中是否存在元素的javascript自定义方法
- 验证会话中是否存在对象's数组
- 检查数组中是否存在字符串值,并返回找到的数组值js
- underline-js:将键对象与数组键对象进行比较,如果存在,则移除现有的添加新的
- 查找数组's按属性不存在于另一个数组中的对象
- 为什么没有从数组中存在的对象中删除属性
- 在对象上迭代以验证它是否's键存在于数组中
- 使用JQuery检查数组的索引中是否存在字符串
- JavaScript对象中存在数组的问题
- 使用javascript/jquery从现有数组中创建一个新数组,该数组保存项目存在的次数
- undercore返回数组中对象的indes,其中单词存在于对象中的句子中
- 如何使用函数来确定 Javascript 数组中是否存在值
- 如何将多个零推送到已经存在的数组
- 如何获取 JSON 数组下存在的相应值
- 仅当项目没有't存在于数组中
- 正在检查JavaScript中是否存在关联数组
- javascript中的数组和if语句存在问题
- 为什么JS需要对象/数组存在
- 如果数组存在于本地存储中,则返回false