使用jQuery,如何遍历对象数组并返回符合特定条件的对象?
答案 0 :(得分:14)
您可以使用jQuery grep功能:
var matches = jQuery.grep(array, function(item) {
// this is a reference to the element in the array
// you can do any test on it you want
// return true if you want it to be in the resulting matches array
// return false if you don't want it to be in the resulting matches array
// for example: to find objects with the Amount property set to a certain value
return(item.Amount === 100);
});
// matches contains all objects that matches
if (matches.length) {
// first match is in matches[0]
}
如果您要测试的条件不是严格相等,那么您将不得不使用某种执行自定义比较的数组迭代。您可以使用.each()
或.grep()
执行此操作,具体取决于您想要的输出类型。
如果条件严格相等,则可以使用jQuery.inArray()
。
显然,你不需要jQuery,因为你可以在普通的javascript中自己迭代数组并实现你想要的任何测试。使用普通javascript的一个优点是,当您找到所需的结果时,可以突破迭代。
在常规javascript中:
for (var i = 0, len = array.length; i < len; i++) {
if (array[i].Price === 100) {
// match is in array[i]
break;
}
}
答案 1 :(得分:1)
$([1,2,2,4]).filter(function(i,n){return n==2;});
这将返回2的
基本上数组可以是dom元素的数组或实际上的任何数组,如果它是jQuery选择器返回的数组,你可以做一些像
$('div.someClass').filter(function(){return $(this).hasClass('someOtherClass')})
仅适用于eg-&gt;这将返回所有具有someClass和someOtherClass的div(注意:还有其他方法可以做到这一点)
根据您的评论进行更新,您可以
$(yourArray).filter(function(i,n){return n.Amount && n.Amount == conditionValue;});
答案 2 :(得分:0)
你真的不需要jQuery来做你需要的事情:
var objects = [{id:23, amount:232}, {id:42, amount: 3434}, ...]
// the function which finds the object you want, pass in a condition function
function findObject(objectMeetsCondition){
for(var i = 0 ; i < objects.length ; i++){
if(objectMeetsCondition(objects[i])) return objects[i];
}
}
// your custom condition that determines whether your object matches
function condition(obj){
return obj.amount == 3434;
}
findObject(condition); // returns {id:42,amount:3434}