在对象数组中,查找其属性与搜索匹配的对象的索引的最快方法

2022-08-30 02:26:56

我一直在四处冲浪,试图找到一种有效的方法来做到这一点,但一无所获。我有一个对象数组,如下所示:

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);

例如,返回未定义,因为它可能应该如此。


答案 1

也许您想使用高阶函数,例如“map”。假设您希望按“字段”属性进行搜索:

var elementPos = array.map(function(x) {return x.id; }).indexOf(idYourAreLookingFor);
var objectFound = array[elementPos];

答案 2

在数组中查找元素索引的最简单、最简单的方法。

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)