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

Test if object with attribute exists in an array using jQuery

本文关键字:属性 对象 存在 是否 jQuery 测试 数组 使用      更新时间:2023-09-26

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

下面是我所拥有的,但它会为数组中的每个对象发出警报,我可以检查整个数组并在最后让它只发出一次警报吗?

我见过grep这样的方法,但我一直在尝试,但无法使其发挥作用。我正在使用jQuery。

var x;
for (x = 0; x < objects.length; x++) {
    if (objects[x].type == 11) {
        alert("exists");
    } else {
        alert("doesnt exist");
    }
}

最好的方法是使用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
}

在这两种情况下都在循环之外。

您的代码应该真正做到这一点。如果您担心循环将毫无用处地继续,您可以通过调用break; 来中止它

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

将其作为一个函数:

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

这将完成

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

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

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<9,有关模拟版本,请参阅MDN文档。