jQuery:如何找到具有某个属性的对象等于某个值?

时间:2012-03-09 00:24:27

标签: jquery

使用jQuery,如何遍历对象数组并返回符合特定条件的对象?

3 个答案:

答案 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}