我有一个对象数组。每个对象都具有ID属性。我想在具有特定ID的对象数组中找到索引。在jQuery中有没有优雅而简单的方法呢?
我有一个对象数组。每个对象都具有ID属性。我想在具有特定ID的对象数组中找到索引。在jQuery中有没有优雅而简单的方法呢?
在你应该使用的情况下 for
循环使用javascript而不是使用jQuery。见方式3 in http://net.tutsplus.com/tutorials/javascript-ajax/10-ways-to-instantly-increase-your-jquery-performance/
更新: jQuery是用javascript编写的,它不能比在javascript中编写的另一个代码更快。如果你使用DOM,jQuery是非常好的,但如果你正在使用简单的javascript数组或对象,那就没有用。
您正在寻找的代码可能是这样的:
for (var i=0, l = ar.length; i<l; i++) {
if (ar[i].ID === specificID) {
// i is the index. You can use it here directly or make a break
// and use i after the loop (variables in javascript declared
// in a block can be used anywhere in the same function)
break;
}
}
if (i<l) {
// i is the index
}
重要的是你应该持有一些简单的javascript规则:总是声明局部变量(不要忘记 var
在变量声明之前)并缓存在局部变量中多次使用的任何属性或索引(如 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
更新:
查看 findIndex
来自ECMAScript 6。
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没有很多像这样的功能结构;图书馆的哲学真正专注于DOM争论的工作。他们甚至不会添加 .reduce()
功能,因为没有人能想到它对核心功能有用的原因。
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 }]);
瞧。