对象数组中的indexOf方法?

对象数组中的indexOf方法?

获得包含对象的数组的索引的最佳方法是什么?

想象一下这个场景:

var hello = {
    hello: 'world',
    foo: 'bar'};var qaz = {
    hello: 'stevie',
    foo: 'baz'}var myArray = [];myArray.push(hello,qaz);

现在我想要indexOf对象hello财产'stevie'在这个例子中,1.

我对JavaScript非常陌生,我不知道是否有一个简单的方法,或者我是否应该构建自己的函数来完成这个任务。


holdtom
浏览 2871回答 3
3回答

莫回无

Array.Prototype.findIndex在IE(非边缘)以外的所有浏览器中都支持。但聚填充如果是不错的话。var&nbsp;indexOfStevie&nbsp;=&nbsp;myArray.findIndex(i&nbsp;=>&nbsp;i.hello&nbsp;===&nbsp;"stevie");地图的解决方案是可以的。但是每次搜索都要遍历整个数组。这只是最坏的情况查找索引一旦找到匹配,就停止迭代。没有一种简明扼要的方法&nbsp;(当开发者不得不担心IE8的时候),但这里有一个常见的解决方案:var&nbsp;searchTerm&nbsp;=&nbsp;"stevie", &nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;=&nbsp;-1;for(var&nbsp;i&nbsp;=&nbsp;0,&nbsp;len&nbsp;=&nbsp;myArray.length;&nbsp;i&nbsp;<&nbsp;len;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(myArray[i].hello&nbsp;===&nbsp;searchTerm)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;=&nbsp;i; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;}}或作为一种功能:function&nbsp;arrayObjectIndexOf(myArray,&nbsp;searchTerm,&nbsp;property)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0,&nbsp;len&nbsp;=&nbsp;myArray.length;&nbsp;i&nbsp;<&nbsp;len;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(myArray[i][property]&nbsp;===&nbsp;searchTerm)&nbsp;return&nbsp;i; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;}arrayObjectIndexOf(arr,&nbsp;"stevie",&nbsp;"hello");&nbsp;//&nbsp;1只是一些笔记:不要在数组上使用.in循环一旦找到“指针”,一定要跳出循环或返回函数。注意对象相等例如,var&nbsp;a&nbsp;=&nbsp;{obj:&nbsp;0};var&nbsp;b&nbsp;=&nbsp;[a];b.indexOf({obj:&nbsp;0});&nbsp;//&nbsp;-1&nbsp;not&nbsp;found

芜湖不芜

在ES 2015中,这很容易做到:myArray.map(x&nbsp;=>&nbsp;x.hello).indexOf('stevie')或者,对于更大的数组,可能具有更好的性能:myArray.findIndex(x&nbsp;=>&nbsp;x.hello&nbsp;===&nbsp;'stevie')

慕沐林林

我认为您可以在一行中使用地图职能:pos&nbsp;=&nbsp;myArray.map(function(e)&nbsp;{&nbsp;return&nbsp;e.hello;&nbsp;}).indexOf('stevie');
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript