如果某些数组元素未定义,如何在对象数组中查找对象?

时间:2012-10-03 17:00:14

标签: javascript jquery

我有一系列具有以下格式的对象:

obj = { ref: 8, id: "obj-8" }

和一个使用jQuery的 grep 方法通过搜索对象 ref 属性从该数组返回项目的函数:

function returnObj(arr,r){
    return $.grep(arr, function(elem,index){ return elem.ref == r; })[0];
}

如果我在一个包含未定义元素的数组上使用此函数(它们以前是使用 delete 运算符删除的),我会收到以下错误: Uncaught TypeError:无法读取属性未定义的'ref',我假设在遇到未定义的元素时抛出它。

如何修改功能,使其不会中断?

3 个答案:

答案 0 :(得分:2)

检查当前项目是undefined,如果您期望特定对象,只需检查“假”,如果是,则返回false

function returnObj(arr,r){
    return $.grep(arr, function(elem,index){ 
                           return elem ? elem.ref == r : false;
                       })[0];
}

这是另一种选择。由于您使用delete删除项目,因此可以使用本机.filter方法,该方法会跳过不存在的数组成员。

function returnObj(arr,r){
    return arr.filter(function(elem){ elem.ref == r})[0];
}

答案 1 :(得分:1)

只是检查它不是undefined

function returnObj(arr,r){
    return $.grep(arr, function(elem,index){
        return elem ? elem.ref == r : false; 
    })[0];
}

答案 2 :(得分:1)

我相信你可以简单地为undefined添加一个测试:

return $.grep(arr, function(elem,index){ return elem != undefined && elem.ref == r; })[0];

但我不确定你为什么要使用$.grep。您可以使用现有的Array.filter来获得相同的结果:

function returnObj(arr,r){
    return arr.filter(function(ele,index){return ele && ele.ref == r;})[0];
}