0

我有一个具有以下格式的对象数组:

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: Cannot read property 'ref' of undefined,我假设当遇到未定义的元素。

如何修改函数使其不会中断?

4

3 回答 3

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];
}
于 2012-10-03T17:01:59.477 回答
1

只需检查它不是undefined

function returnObj(arr,r){
    return $.grep(arr, function(elem,index){
        return elem ? elem.ref == r : false; 
    })[0];
}
于 2012-10-03T17:02:56.477 回答
1

我相信您可以简单地为未定义添加一个测试:

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];
}
于 2012-10-03T17:04:23.137 回答