jQuery:数组中元素索引的谓词

我有一个对象数组。 每个对象都具有ID属性。 我想在具有特定ID的对象数组中找到索引。 在jQuery中有没有优雅而简单的方法呢?

在这种情况下,您应该在javascript中使用for循环而不是使用jQuery。 请参阅http://net.tutsplus.com/tutorials/javascript-ajax/10-ways-to-instantly-increase-your-jquery-performance/中的方法3

更新: jQuery是用javascript编写的,它不能比在javascript中编写的另一个代码更快。 如果你使用DOM,jQuery是非常好的,但如果你正在使用简单的javascript数组或对象,那就没有用。

您正在寻找的代码可能是这样的:

 for (var i=0, l = ar.length; i 

重要的是你应该保留一些简单的javascript规则:始终声明局部变量(不要忘记变量声明前的var )并缓存在局部变量中ar.length使用的任何属性或索引(如上面的ar.length )。 (例如参见http://wiki.forum.nokia.com/index.php/JavaScript_Performance_Best_Practices )

请参见[`Array.filter`] [1]以使用回调函数过滤数组。 数组中的每个对象将逐个传递给回调函数。 如果要包含该值,则回调函数必须返回“true”,否则返回false。

     var matchingIDs = objects.filter(function(o){
         return o.ID == searchTerm;
     });

具有ID为searchTerm的所有对象将作为数组返回到matchingIDs。 从第一个索引获取匹配元素(假设ID是唯一的,并且只有一个)

     matchingIDs [0];

   [1]:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter

更新:

来自ECMAScript 6的findIndex

 items.findIndex(function(item) { item.property == valueToSearch; }); 

由于findIndex尚未在大多数浏览器上提供,您可以使用此实现回填它:

 if (!Array.prototype.findIndex) { Array.prototype.findIndex = function(predicate) { if (this == null) { throw new TypeError('Array.prototype.findIndex called on null or undefined'); } if (typeof predicate !== 'function') { throw new TypeError('predicate must be a function'); } var list = Object(this); var length = list.length >>> 0; var thisArg = arguments[1]; var value; for (var i = 0; i < length; i++) { value = list[i]; if (predicate.call(thisArg, value, i, list)) { return i; } } return -1; }; } 

不是很优雅,但是一个可爱的伎俩:

 var index = parseInt( $.map(array, function(i, o) { return o.id === target ? i : ''; }).join('') ); 

jQuery没有很多像这样的function结构; 图书馆的哲学真正专注于DOM争论的工作。 他们甚至不会添加.reduce()函数,因为没有人能想到它对核心function有用的原因。

Underscore.js库有很多这样的设施,它与jQuery“玩得很好”。

没有内置的方法; [].indexOf()方法不接受谓词,所以你需要一些自定义的东西:

 function indexOf(array, predicate) { for (var i = 0, n = array.length; i != n; ++i) { if (predicate(array[i])) { return i; } } return -1; } var index = indexOf(arr, function(item) { return item.ID == 'foo'; }); 

如果谓词永远不会产生真值,则该函数返回-1。

使用jOrder。 http://github.com/danstocker/jorder

将数组送入jOrder表,并在“ID”字段上添加索引。

 var table = jOrder(data) .index('id', ['ID']); 

然后,通过以下方式获取元素的数组索引:

 var arrayidx = table.index('id').lookup([{ ID: MyID }]); 

如果你想要整行,那么:

 var filtered = table.where([{ ID: MyID }]); 

瞧。