我有一个具有以下格式的对象数组:
obj = { ref: 8, id: "obj-8" }以及使用jQuery的grep方法从该数组返回项的函数,方法是搜索object ref属性:
function returnObj(arr,r){
return $.grep(arr, function(elem,index){ return elem.ref == r; })[0];
}如果我在包含未定义元素的数组上使用此函数(之前使用delete操作符删除了这些元素),则会得到以下错误: Uncaught :无法读取未定义元素的“ref”属性,假设遇到未定义元素时会抛出该属性。
如何修改该函数,使其不中断?
发布于 2012-10-03 17:01:59
只需检查当前项是否为undefined,或者如果期望指定对象,只需"falsey“,如果需要,则返回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-03 17:02:56
只要检查一下它是不是undefined
function returnObj(arr,r){
return $.grep(arr, function(elem,index){
return elem ? elem.ref == r : false;
})[0];
}发布于 2012-10-03 17:04:23
我相信您可以简单地添加一个未定义的测试:
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];
}https://stackoverflow.com/questions/12713278
复制相似问题