检查对象是否位于 localStorage 中的 AngularJS 数组中
Check if object is in AngularJS array that is in localStorage
我有这个angularjs数组:$scope.fav = []
在函数调用中向其添加项目(对象(的地方。 这些对象的一个示例是{quote: "Some text", controller: some_controller}
当我向数组添加新对象时,该数组将保存在本地存储中。数组完全按照我想要的方式工作,除非当我尝试在 console.log(( 中打印它时,我得到了很多 [对象,对象],我只是假设这是它的打印方式。不过,这不是主要问题,因为数组可以根据需要工作。
我遇到的问题是试图查找对象是否已在数组中。我试过了
if ($scope.fav.indexOf({quote: q, controller: c}) == -1)
这似乎不起作用,因为每个进入的对象都是索引 -1,即使它已经在数组中。我认为这是因为它没有正确读取对象。
最后,我使用了这个功能:
$scope.containsObject = function(obj, list) {
var i;
for (i = 0; i < list.length; i++) {
if (list[i] === obj) {
return true;
}
}
return false;
}
检查对象是否在数组中。我是这样称呼它的:
$scope.addToFav = function(q, c) {
$scope.value = $scope.containsObject({quote: q, controller: c}, $scope.fav)
console.log($scope.value);
}
即使对象在数组中,我也不断获得 $scope.value 的负值。很抱歉冗长的复杂解释。
感谢您的见解,本
Array.indexOf()
和 ===
运算符比较对象引用,并且仅在比较对同一对象实例的引用时才为真。 {quote: q, controller: c}
是与数组中的对象完全不同的对象实例,即使其属性与数组中的对象完全匹配。
Angular 有一个名为 angular.equals()
的辅助函数,它检查 2 个对象是等效的。您可以使用它代替===
...
$scope.containsObject = function(obj, list) {
var i;
for (i = 0; i < list.length; i++) {
if (angular.equals(list[i], obj)) {
return true;
}
}
return false;
};
每次从本地存储中检索对象时,实际上都会创建一个新对象(可能使用 JSON.decode(,将存储在本地存储中的字符串数据转换为对象。
即使新对象包含相同的数据,与现有(尽管表面上相同(对象相比,它也将无法通过严格的测试===
(实际上是松散==
(。 indexOf
使用严格相等运算符===
因此其行为方式相同。
因此,您需要一些代码来测试一个对象是否等于另一个对象,然后将其应用于列表。一种方法是使用 angular.equals
的组合,它执行对象的深度比较,并filter
:
$scope.containsObject = function(obj, list) {
return list.filter(function(listItem) {
return angular.equals(listItem, obj)
}).length > 0;
}
我不相信filter
功能是IE8的一部分。如果需要支持 IE8,可以使用 polyfill,或使用其他库,如 lo-dash
$scope.containsObject = function(obj, list) {
return _.filter(list, function(listItem) {
return angular.equals(listItem, obj)
}).length > 0;
}
- EJS中的Angularjs-Ui路由器参数
- 自定义指令中的AngularJS ng模型
- 无法访问指令中的AngularJS属性
- 自定义指令模板中的AngularJS控制变量
- 函数中的 angularJS 访问对象属性不起作用
- 指令中的 AngularJS 自定义过滤器以格式化值
- 嵌套ng中的Angularjs单选按钮重复未选中
- 配置中的AngularJS筛选器
- 量角器中的AngularJS E2E测试失败
- 如何正确访问es6中的AngularJS服务
- 工厂中的AngularJS$http请求
- 未调用路由中的AngularJS控制器
- 指令中的AngularJS函数()与函数factory()
- ng中的Angularjs函数重复调用过多次
- 通过 aspx 网页中的 Angularjs 将数据传递给 WebMethod
- IE中的AngularJS错误与样式与ng样式
- 指令和表单验证中的 AngularJS 动态必需属性
- IIS中的AngularJS路由
- 从 MeanJS 中的 AngularJS Promise 获取值
- React 组件中的 AngularJS 过滤器