首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果某些数组元素未定义,如何在对象数组中查找对象?

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

Stack Overflow用户
提问于 2012-10-03 17:00:14
回答 3查看 526关注 0票数 0

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

代码语言:javascript
复制
obj = { ref: 8, id: "obj-8" }

以及使用jQuery的grep方法从该数组返回项的函数,方法是搜索object ref属性:

代码语言:javascript
复制
function returnObj(arr,r){
    return $.grep(arr, function(elem,index){ return elem.ref == r; })[0];
}

如果我在包含未定义元素的数组上使用此函数(之前使用delete操作符删除了这些元素),则会得到以下错误: Uncaught :无法读取未定义元素的“ref”属性,假设遇到未定义元素时会抛出该属性。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-03 17:01:59

只需检查当前项是否为undefined,或者如果期望指定对象,只需"falsey“,如果需要,则返回false

代码语言:javascript
复制
function returnObj(arr,r){
    return $.grep(arr, function(elem,index){ 
                           return elem ? elem.ref == r : false;
                       })[0];
}

这是另一个选择。由于使用delete删除项,所以可以使用本机.filter方法,它跳过不存在的数组成员。

代码语言:javascript
复制
function returnObj(arr,r){
    return arr.filter(function(elem){ elem.ref == r})[0];
}
票数 2
EN

Stack Overflow用户

发布于 2012-10-03 17:02:56

只要检查一下它是不是undefined

代码语言:javascript
复制
function returnObj(arr,r){
    return $.grep(arr, function(elem,index){
        return elem ? elem.ref == r : false; 
    })[0];
}
票数 1
EN

Stack Overflow用户

发布于 2012-10-03 17:04:23

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

代码语言:javascript
复制
return $.grep(arr, function(elem,index){ return elem != undefined && elem.ref == r; })[0];

但我不知道你为什么要使用$.grep。您可以使用现有的Array.filter实现相同的结果:

代码语言:javascript
复制
function returnObj(arr,r){
    return arr.filter(function(ele,index){return ele && ele.ref == r;})[0];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12713278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档