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

时间:2014-04-16 21:02:44

标签: javascript arrays angularjs

使用案例

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

4 个答案:

答案 0 :(得分:21)

angular.equals()对没有$前缀属性的对象进行深度比较......

function arrayObjectIndexOf(arr, obj){
    for(var i = 0; i < arr.length; i++){
        if(angular.equals(arr[i], obj)){
            return i;
        }
    };
    return -1;
}

答案 1 :(得分:5)

由于它有角度,为什么不使用过滤:

$ filter(&#39; filter&#39;)(pages,{id:pageId},true);

其中pages是数组,id是您要匹配的object属性,pageId是您要匹配的值。

答案 2 :(得分:1)

好的,所以这有点难看,但这是最简单的解决方案:

function arrayObjectIndexOf(arr, obj) {
    JSON.parse(angular.toJson(arr)).indexOf(obj)
}

angular.toJson位删除带有前导$的任何属性。您可能只想将该干净对象存储在某处进行搜索。或者,您可以编写自己的比较材料,但这只是一种瞎眼。

答案 3 :(得分:0)

使用lodash的find,where,过滤来操作集合,检查文档http://lodash.com/docs