我有一系列具有以下格式的对象:
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',我假设在遇到未定义的元素时抛出它。
如何修改功能,使其不会中断?
答案 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];
}