假设我有一个"purpose“对象数组:
//array of purpose objects:
var purposeObjects = [
{purpose: "daily"},
{purpose: "weekly"},
{purpose: "monthly"}
];
(为了简单起见,我省略了其他属性)
现在,我想要有一个方法,如果找到匹配的目的名称,它将返回一个特定的对象。
这不起作用:
function findPurpose(purposeName){
return $.grep(purposeObjects, function(){
return this.purpose == purposeName;
});
};
findPurpose("daily");
但它实际上返回一个空数组:
[]
我使用的是JQuery 1.5.2。我也尝试过$.each(),但没有成功。显然,大多数JQuery方法都是为使用DOM元素而设计的(例如filter()
。
对如何实现这一点有什么想法吗?
发布于 2011-04-07 18:35:45
错误是不能在grep中使用this
,但必须使用对元素的引用。这是可行的:
function findPurpose(purposeName){
return $.grep(purposeObjects, function(n, i){
return n.purpose == purposeName;
});
};
findPurpose("daily");
返回:
[Object { purpose="daily"}]
发布于 2011-04-07 18:39:50
您应该在grep函数中传递对项目的引用:
function findPurpose(purposeName){
return $.grep(purposeObjects, function(item){
return item.purpose == purposeName;
});
};
发布于 2013-10-03 16:28:35
我个人使用了一个更通用的函数,它适用于任何数组的任何属性:
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];
}
你可以这样称呼它:
lookup(purposeObjects, "purpose", "daily");
https://stackoverflow.com/questions/5579678
复制相似问题