使用jQuery测试数组中是否存在具有属性的对象

时间:2013-02-15 00:13:41

标签: javascript jquery arrays

有人可以告诉我检查对象数组中的对象是type 11的最佳方法吗?

下面是我的内容,但它会提醒数组中的每个对象,我可以检查整个数组并让它在最后一次提醒吗?

我见过像grep这样的方法,但我一直在努力,无法让它发挥作用。我正在使用jQuery。

var x;
for (x = 0; x < objects.length; x++) {

    if (objects[x].type == 11) {
        alert("exists");
    } else {
        alert("doesnt exist");
    }
}

5 个答案:

答案 0 :(得分:4)

最好的方法是使用Array.some

var exists = objects.some(function(el) { return el.type === 11 });

在链接中还有一个不支持它的浏览器垫片。

否则你可以迭代:

var exists = false;
for (var i = 0, el; !exists && (el = objects[i++]);)
    exists = el.type === 11;

设置exists变量后,您可以执行以下操作:

if (exists) {
    // do something
}

在两个案例中,在循环之外。

答案 1 :(得分:3)

您的代码应该实际执行此操作。如果您对循环将无用地继续感到困扰,可以通过调用break;

来中止它
if(objects[x].type == 11){
    alert("exists");
    break;
 }

答案 2 :(得分:1)

使它成为一个功能:

function hasObjWithType11(arr) {
    var x;
    for (x = 0; x < arr.length; x++) {
        if(arr[x].type == 11){
            return true;
        }
    }
    return false;
}

alert(hasObjWithType11([{type:1}, {type:11}]); // alerts true

答案 3 :(得分:1)

这样做

var exists = false;
for (var x = 0; x < objects.length; x++) {
     if(objects[x].type == 11){
       exists = true;
       break;
     }
}
if(exists){
    alert("exists");
}

答案 4 :(得分:1)

通过将搜索代码包装到单独的函数中,可以使搜索代码更具可重用性。通过这种方式,您可以将条件外部化以便于阅读:

function array_contains(a, fn)
{
    for (i = 0, len = a.length; i < len; ++i) {
        if (fn(a[i])) {
            return true;
        }
    }
    return false;
}

if (array_contains(objects, function(item) { return item.type == 11; })) {
    alert('found');
}

您也可以使用Array.some()

if (objects.some(function(item) {
  return item.type == 11;
})) {
    alert('exists');
}

对于IE&lt; 9,请参阅模拟版本的MDN文档。