2011-05-24 114 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

相关问题