2013-02-15 47 views
2

有人可以告訴我檢查一個對象數組中的對象是否有type11的最佳方法嗎?使用jQuery測試數組中是否存在帶屬性的對象

下面是我所擁有的,但它會警惕數組中的每個對象,我可以檢查整個數組,並讓它在最後提醒一次嗎?

我見過像grep這樣的方法,但我一直在嘗試,並且無法使其工作。我正在使用jQuery。

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

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

你在用什麼錯? – 2013-02-15 00:15:35

+0

@BrianCray他/她正在提醒每一次迭代 – Popnoodles 2013-02-15 00:15:59

+2

'我見過像grep這樣的方法,但我一直在嘗試,並且無法讓它工作。「這就是您將如何使用[** grep **](http ://api.jquery.com/jQuery.grep/):'var existGrep = jQuery.grep(objects,function(item){return(item.type === 11);});'我只將它添加到告訴你如何讓grep()工作,但當然任何其他答案都更適合/有效,比如'Array.some'或使用'break',因爲'grep()'將遍歷整個數組。 – Nope 2013-02-15 01:14:11

回答

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

您的代碼應該真正做到這一點。如果你正在煩惱該會白白繼續,您可以通過包裝它通過調用break;

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

終止它這會做到這一點

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

不需要別的東西,它在循環之前已經被聲明爲false。 – 2013-02-15 00:20:07

+0

好點,固定。 – sissonb 2013-02-15 00:21:27

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 9 <,請參閱MDN文檔的模擬版本。

3

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

外循環,在這兩種情況下。

+0

這已經在其他答案中進行了介紹。 – 2013-02-15 01:05:30

相關問題