不知道爲什麼每一個()不爲你工作:
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。我的錯。
可能是我,但有沒有在你的榜樣任何jQuery的特定代碼? – gnur 2011-05-24 09:04:13
你只想要索引或對象本身? – 2011-05-24 09:04:18
我想索引我想我可以用grep獲得對象。 – Daniel 2011-05-24 09:06:17