为了账号安全,请及时绑定邮箱和手机立即绑定

对象数组中的indexOf方法?

对象数组中的indexOf方法?

holdtom 2019-06-24 15:21:09
对象数组中的indexOf方法?获得包含对象的数组的索引的最佳方法是什么?想象一下这个场景:var hello = {     hello: 'world',     foo: 'bar'};var qaz = {     hello: 'stevie',     foo: 'baz'}var myArray = [];myArray.push(hello,qaz);现在我想要indexOf对象hello财产'stevie'在这个例子中,1.我对JavaScript非常陌生,我不知道是否有一个简单的方法,或者我是否应该构建自己的函数来完成这个任务。
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

Array.Prototype.findIndex在IE(非边缘)以外的所有浏览器中都支持。但聚填充如果是不错的话。

var indexOfStevie = myArray.findIndex(i => i.hello === "stevie");

地图的解决方案是可以的。但是每次搜索都要遍历整个数组。这只是最坏的情况查找索引一旦找到匹配,就停止迭代。



没有一种简明扼要的方法 (当开发者不得不担心IE8的时候),但这里有一个常见的解决方案:


var searchTerm = "stevie",
    index = -1;for(var i = 0, len = myArray.length; i < len; i++) {
    if (myArray[i].hello === searchTerm) {
        index = i;
        break;
    }}

或作为一种功能:

function arrayObjectIndexOf(myArray, searchTerm, property) {
    for(var i = 0, len = myArray.length; i < len; i++) {
        if (myArray[i][property] === searchTerm) return i;
    }
    return -1;}arrayObjectIndexOf(arr, "stevie", "hello"); // 1

只是一些笔记:

  1. 不要在数组上使用.in循环
  2. 一旦找到“指针”,一定要跳出循环或返回函数。
  3. 注意对象相等

例如,

var a = {obj: 0};var b = [a];b.indexOf({obj: 0}); // -1 not found




查看完整回答
1 反对 回复 2019-06-24
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

在ES 2015中,这很容易做到:

myArray.map(x => x.hello).indexOf('stevie')

或者,对于更大的数组,可能具有更好的性能:

myArray.findIndex(x => x.hello === 'stevie')


查看完整回答
1 反对 回复 2019-06-24
?
慕沐林林

TA贡献2016条经验 获得超9个赞

我认为您可以在一行中使用地图职能:

pos = myArray.map(function(e) { return e.hello; }).indexOf('stevie');


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 2870 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信