Javascript jQuery:数组中元素的索引,其中谓词
我有一个对象数组。除其他外,每个对象都有一个ID属性。我想在具有特定ID的对象数组中查找索引。在jQuery中有什么优雅而简单的方法可以做到这一点吗?不是很优雅,而是一个可爱的技巧:Javascript jQuery:数组中元素的索引,其中谓词,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个对象数组。除其他外,每个对象都有一个ID属性。我想在具有特定ID的对象数组中查找索引。在jQuery中有什么优雅而简单的方法可以做到这一点吗?不是很优雅,而是一个可爱的技巧: var index = parseInt( $.map(array, function(i, o) { return o.id === target ? i : ''; }).join('') ); jQuery没有很多这样的函数结构;图书馆的哲学真正集中在DOM争论的工作上。他们甚至不会添加.reduce(
var index = parseInt(
$.map(array, function(i, o) { return o.id === target ? i : ''; }).join('')
);
jQuery没有很多这样的函数结构;图书馆的哲学真正集中在DOM争论的工作上。他们甚至不会添加.reduce()
函数,因为没有人能想到它对核心功能有用的原因
Underline.js库有很多这样的功能,它与jQuery“配合得很好”。在这种情况下,您应该在javascript中使用
for
循环,而不是使用jQuery。参见中的方式3
更新:jQuery是用javascript编写的,它不能比另一个同样用javascript编写的代码快。如果您使用DOM,jQuery非常好,但如果您使用简单的javascript数组或对象,jQuery实际上没有帮助
您要查找的代码可以是这样的:
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
}
for(变量i=0,l=ar.length;i
由于findIndex
在大多数浏览器上还不可用,您可以使用以下方法对其进行回填:
if(!Array.prototype.findIndex){
Array.prototype.findIndex=函数(谓词){
if(this==null){
抛出新的TypeError('Array.prototype.findIndex调用为null或未定义');
}
if(类型谓词!=='function'){
抛出新类型错误('谓词必须是函数');
}
变量列表=对象(此);
var length=list.length>>>0;
var thisArg=参数[1];
var值;
对于(变量i=0;i
使用jOrder
将数组馈送到jOrder表中,并在“ID”字段上添加索引
var table = jOrder(data)
.index('id', ['ID']);
然后,通过以下方式获取元素的数组索引:
var arrayidx = table.index('id').lookup([{ ID: MyID }]);
如果需要整行,则:
var filtered = table.where([{ ID: MyID }]);
瞧。没有用于此的内置方法;该方法不接受谓词,因此您需要一些自定义的内容:
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
更新
您现在可以使用以下功能:
const arr=[{ID:'bar'},{ID:'baz'},{ID:'foo'}];
const index=arr.findIndex(item=>item.ID==='foo');
console.log(索引)/2
OP询问如何获取元素的索引,而不是元素本身。@epeleg-我似乎没有正确阅读问题。按照Oleg的建议,循环遍历每个对象并在找到匹配项时中断。这正是我要寻找的。太糟糕了,没有优雅的解决方案确实……不错,但效率很低数组中的所有元素……如果你对它们进行检查,你可能会构建一个反向散列,这样你就可以回答许多“specific id”的Q。
var arrayidx = table.index('id').lookup([{ ID: MyID }]);
var filtered = table.where([{ ID: MyID }]);
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';
});