首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Jquery如何在数组中按属性查找对象

Jquery如何在数组中按属性查找对象
EN

Stack Overflow用户
提问于 2011-04-07 18:32:33
回答 9查看 124.6K关注 0票数 71

假设我有一个"purpose“对象数组:

代码语言:javascript
复制
//array of purpose objects:
var purposeObjects = [
    {purpose: "daily"},
    {purpose: "weekly"},
    {purpose: "monthly"}
];

(为了简单起见,我省略了其他属性)

现在,我想要有一个方法,如果找到匹配的目的名称,它将返回一个特定的对象。

这不起作用:

代码语言:javascript
复制
function findPurpose(purposeName){
    return $.grep(purposeObjects, function(){
      return this.purpose == purposeName;
    });
};

findPurpose("daily");

但它实际上返回一个空数组:

代码语言:javascript
复制
[]

我使用的是JQuery 1.5.2。我也尝试过$.each(),但没有成功。显然,大多数JQuery方法都是为使用DOM元素而设计的(例如filter()

对如何实现这一点有什么想法吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-04-07 18:35:45

错误是不能在grep中使用this,但必须使用对元素的引用。这是可行的:

代码语言:javascript
复制
function findPurpose(purposeName){
    return $.grep(purposeObjects, function(n, i){
      return n.purpose == purposeName;
    });
};

findPurpose("daily");

返回:

代码语言:javascript
复制
[Object { purpose="daily"}]
票数 29
EN

Stack Overflow用户

发布于 2011-04-07 18:39:50

您应该在grep函数中传递对项目的引用:

代码语言:javascript
复制
function findPurpose(purposeName){
    return $.grep(purposeObjects, function(item){
      return item.purpose == purposeName;
    });
};

Example

票数 40
EN

Stack Overflow用户

发布于 2013-10-03 16:28:35

我个人使用了一个更通用的函数,它适用于任何数组的任何属性:

代码语言:javascript
复制
function lookup(array, prop, value) {
    for (var i = 0, len = array.length; i < len; i++)
        if (array[i] && array[i][prop] === value) return array[i];
}

你可以这样称呼它:

代码语言:javascript
复制
lookup(purposeObjects, "purpose", "daily");
票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5579678

复制
相关文章

相似问题

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