我怎样才能find一个数组中具有特定值的对象的索引?

由于标题不容易得到,我会举一个例子:

var myObject = { "myArray": [{ "hashKey": "someHashkey1", "data": "someData1" }, { "hashKey": "someHashkey2", "data": "someData2" }, { "hashKey": "someHashkey3", "data": "someData3" }] }; 

我有“myObject”包含“myArray”,现在我想有效地find对象的索引,例如,hashKey“someHashKey2”。

我可以build立自己的循环来检查数组中的所有元素,但是:

  1. 有没有一个内置的方式来做到这一点? 像indexOf()?

  2. 是否有一个NPM的工具,这种需要(我在Node.js工作)

  3. 有没有在这里工作的有效方式? 一些不好的方法来避免?

[编辑:]我的效率问题是由于我将不得不做基本上所有的hashKeys这个操作。 我刚刚发现这个问题有一个“查找”的答案,可以帮助。 仍然在理解这一切的过程…

如果你有一个散列键,我build议你将数组转换为一个对象,然后你可以find使用散列键这样的对象: myObject.myArray["someHashkey1"]

 var myObject = { "myArray" : { "someHashkey1":{ "hashKey": "someHashkey1", "data": "someData1" }, "someHashkey2":{ "hashKey": "someHashkey2", "data": "someData2" } } }; console.log(myObject.myArray["someHashkey1"]); 

你可以简单地使用Array.prototype.findIndex获得你想要的每个项目的索引。

 var myObject = {"myArray": [{"hashKey": "someHashkey1", "data": "someData1"}, {"hashKey": "someHashkey2", "data": "someData2"}, {"hashKey": "someHashkey3", "data": "someData3"}] }; console.log(myObject.myArray.findIndex(i => i.hashKey === 'someHashkey2')); 

每当你想从一个数组中获得一个(非布尔值)值时,你几乎总是想要reduce

 var index = myObject.myArray.reduce((index, record, i) => { if (index !== -1 || !('somekey' in record)) { return index; } else { return i; } }, -1); 

或“打高尔夫球”:

 var index = myObject.myArray.reduce((i, x, j) => {i || x.somekey ? i : j},-1);