有人可以告诉我检查对象数组中的对象是type
11
的最佳方法吗?
下面是我的内容,但它会提醒数组中的每个对象,我可以检查整个数组并让它在最后一次提醒吗?
我见过像grep这样的方法,但我一直在努力,无法让它发挥作用。我正在使用jQuery。
var x;
for (x = 0; x < objects.length; x++) {
if (objects[x].type == 11) {
alert("exists");
} else {
alert("doesnt exist");
}
}
答案 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文档。