2011-05-24 87 views
7

我試圖找到一個對象的索引中jQuery中的數組。 我不能使用jQuery.inArray,因爲我想匹配某個屬性上的對象。 我使用:如何找到對象的指數JavaScript數組中使用jQuery

jQuery.inObjectArray = function(arr, func) 
    { 
     for(var i=0;i<arr.length;i++) 
      if(func(arr[i])) 
       return i; 
     return -1; 
    } 

,然後調用:

jQuery.inObjectArray([{Foo:"Bar"}], function(item){return item.Foo == "Bar"}) 

有一個內置的方式嗎?

+0

可能是我,但有沒有在你的榜樣任何jQuery的特定代碼? – gnur 2011-05-24 09:04:13

+0

你只想要索引或對象本身? – 2011-05-24 09:04:18

+0

我想索引我想我可以用grep獲得對象。 – Daniel 2011-05-24 09:06:17

回答

7

不知道爲什麼每一個()不爲你工作:

BROKEN - 見下FIX

function check(arr, closure) 
{ 
    $.each(arr,function(idx, val){ 
     // Note, two options are presented below. You only need one. 
     // Return idx instead of val (in either case) if you want the index 
     // instead of the value. 

     // option 1. Just check it inline. 
     if (val['Foo'] == 'Bar') return val; 

     // option 2. Run the closure: 
     if (closure(val)) return val; 
    }); 
    return -1; 
} 

的作品評論其他例子。

Array.prototype.UContains = function(closure) 
{ 
    var i, pLen = this.length; 
    for (i = 0; i < pLen; i++) 
    { 
     if (closure(this[i])) { return i; } 
    } 
    return -1; 
} 
// usage: 
// var closure = function(itm) { return itm.Foo == 'bar'; }; 
// var index = [{'Foo':'Bar'}].UContains(closure); 

好吧,我的第一個例子是HORKED。大約6個月後,指出了我和多個upvotes。 :)

正常,則檢查()應該是這樣的:

function check(arr, closure) 
{ 
    var retVal = false; // Set up return value. 
    $.each(arr,function(idx, val){ 
     // Note, two options are presented below. You only need one. 
     // Return idx instead of val (in either case) if you want the index 
     // instead of the value. 

     // option 1. Just check it inline. 
     if (val['Foo'] == 'Bar') retVal = true; // Override parent scoped return value. 

     // option 2. Run the closure: 
     if (closure(val)) retVal = true; 
    }); 
    return retVal; 
} 

這裏的原因很簡單...返回的作用域是不對的。

至少原型對象的版本(一個我居然選中)工作。

感謝Crashalot。我的錯。

+0

也許他使用'$(arr).each()' – ThiefMaster 2011-05-24 09:11:48

+1

感謝您的支持。我實際上是在尋找像inArray這樣的函數,就像我上面寫的函數一樣,不會讓我創建像剛剛創建的函數。所以爲了讓我自己清楚,有一個內置函數可以完成你的函數的功能。但也許我看起來太過分了。 – Daniel 2011-05-24 09:13:15

+0

是的。我其實並不喜歡jQuery的那些......這些名字都是超負荷的。當然,這個硬幣的另一面就像PHP,其數百個非命名空間頂級功能。 – 2011-05-24 09:14:41

相關問題