Pet*_*rov 129 javascript arrays indexof
我一直在尝试寻找一种有效的方法,但我已经无处可去.我有一个对象数组,如下所示:
array[i].id = some number;
array[i].name = some name;
我想要做的是找到id等于的对象的INDEXES,例如,0,1,2,3或4中的一个.我想我可以做类似的事情:
var indexes = [];
for(i=0; i<array.length; i++) {
  (array[i].id === 0) ? { indexes[0] = i }
  (array[i].id === 1) ? { indexes[1] = i }
  (array[i].id === 2) ? { indexes[2] = i }
  (array[i].id === 3) ? { indexes[3] = i }
  (array[i].id === 4) ? { indexes[4] = i }
}
虽然这可行,但它看起来相当昂贵且缓慢(更不用说丑陋),特别是如果array.length可能很大.关于如何修饰这一点的任何想法?我想过以某种方式使用array.indexOf,但我没有看到如何强制语法.这个
array.indexOf(this.id === 0);
例如,返回undefined,因为它可能应该.提前致谢!
Pab*_*lgo 373
也许你想使用更高阶的函数,比如"map".假设您想通过'field'属性进行搜索:
var elementPos = array.map(function(x) {return x.id; }).indexOf(idYourAreLookingFor);
var objectFound = array[elementPos];
Uma*_*med 59
在数组中查找元素索引的最简单,最简单的方法.
ES5语法: [{id:1},{id:2},{id:3},{id:4}].findIndex(function(obj){return obj.id == 3})
ES6语法: [{id:1},{id:2},{id:3},{id:4}].findIndex(obj => obj.id == 3)
jba*_*bey 26
新的Array方法.filter()适用于此:
var filteredArray = array.filter(function (element) { 
    return element.id === 0;
});
jQuery也可以用.grep()做到这一点
编辑:值得一提的是这两个函数都只是在引擎盖下迭代,它们之间不会有明显的性能差异并且滚动你自己的滤镜功能,但为什么要重新发明轮子.
array.forEach(function (elem, i) {  // iterate over all elements of array
    indexes[elem.id] = i;           // take the found id as index for the
});                                 // indexes array and assign i
结果是id的查找列表.使用给定的id,我们得到记录的索引.
var indices = [];
var IDs = [0, 1, 2, 3, 4];
for(var i = 0, len = array.length; i < len; i++) {
    for(var j = 0; j < IDs.length; j++) {
        if(array[i].id == ID) indices.push(i);
    }
}
由于使用常规数组没有答案find:
var one = {id: 1, name: 'one'};
var two = {id: 2, name:'two'}
var arr = [one, two] 
var found = arr.find((a) => a.id === 2)
found === two // true
arr.indexOf(found) // 1
小智 6
const index = array.findIndex(item => item.id === 'your-id');
这应该为您提供 id === your-id 数组中项目的索引
array = [ {id:1}, {id:2} ];
const index = array.findIndex(item => item.id === 2);
console.log(index);使用 ES6 的新方法
let picked_element = array.filter(element => element.id === 0);
如果您关心性能,请不要使用查找或过滤或映射或上面讨论的任何方法
这是演示最快方法的示例。这里是实际测试的链接
设置块
var items = []
for(var i = 0; i < 1000; i++) {
    items.push({id: i + 1})
}
var find = 523
最快的方法
var index = -1
for(var i = 0; i < items.length; i++) {
    if(items[i].id === find) {
        index = i;
        break;
    }
}
较慢的方法
items.findIndex(item => item.id === find)
最慢的方法
items.map(item => item.id).indexOf(find);