如何获取AngularJS响应对象集合中对象的indexOf

How to get the indexOf an object within an AngularJS response object collection?

本文关键字:对象 集合 indexOf 响应 AngularJS 何获取 获取      更新时间:2023-09-26

用例

我有一个从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