如何获取AngularJS响应对象集合中对象的indexOf
How to get the indexOf an object within an AngularJS response object collection?
用例
我有一个从REST请求返回的对象集合。Angular会自动为每个元素填充一个$$hashKey
。问题是,当我在没有$$hashKey
的数组中搜索对象时,它会返回-1。这是有道理的。不幸的是,我不知道$$hashKey
的价值。
问题
有没有一种更有效的方法可以在AngularJS中从REST请求返回的对象集合中搜索对象,而不剥离$$hashKey
属性?
代码
function arrayObjectIndexOf(arr, obj) {
var regex = /,?"'$'$hashKey":".*?",?/;
var search = JSON.stringify(obj).replace(regex, '');
console.log(search);
for ( var i = 0, k = arr.length; i < k; i++ ){
if (JSON.stringify(arr[i]).replace(regex, '') == search) {
return i;
}
};
return -1;
};
angular.equals()
对没有前缀为$
的属性的对象进行深入比较。。。
function arrayObjectIndexOf(arr, obj){
for(var i = 0; i < arr.length; i++){
if(angular.equals(arr[i], obj)){
return i;
}
};
return -1;
}
既然它是有角度的,为什么不使用过滤:
$filter('filter')(pages,{id:pageId},true);
其中pages是数组,id是您想要匹配的对象属性,pageId是您要匹配的值。
好的,所以这有点难看,但这是最简单的解决方案:
function arrayObjectIndexOf(arr, obj) {
JSON.parse(angular.toJson(arr)).indexOf(obj)
}
angular.toJson
位去掉任何带有前导$的属性。您可能只想将干净的对象存储在某个地方进行搜索。或者,你也可以自己写一些比较的东西,但那只是废话。
使用lodash的find,where,filter操作集合,检查文档http://lodash.com/docs
相关文章:
- 使用Undercore创建对象集合
- 我们可以用参数对象集合而不是原始数据来调用JavaScript collection.reduce()方法吗
- 将一个对象集合映射到汇总集合的单个对象
- 正在查找对象集合的最大值
- 如何将带有普通对象集合的 Js 数组对象传递给 ajax post'html' 数据类型中的控制器
- 如何在 JavaScript 中对对象集合进行排序,而不将其转换为数组
- 在 JavaScript 中向对象集合添加键
- 对象集合之间的jQuery.index
- 如何为对象集合创建接口
- 如何将对象转换为对象数组(或对象集合)
- JS/MongoDB:检查对象(集合文档)中是否存在嵌套字段
- 通过angular js中的http-post传递对象集合
- 对对象集合使用触发器
- 尝试在ASP.NET MVC 3中将对象集合从客户端传递到服务器
- MongoDb:如何将附加对象插入到对象集合中
- 将具有唯一id的对象集合存储为以id作为键的关联数组,而不是作为常规数组,是否存在缺陷?
- 如何在使用AngularJS ng-repeat时访问过滤对象集合?
- 如何在JavaScript中创建对象集合并在另一个对象中赋值
- 是否有一种更简单的方法来使用lodash从多个对象集合中构造一个唯一值的数组?
- 当尝试按名称获取链接按钮时,获取HTML对象集合