对象数组中的indexOf方法?

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

想象一下这个场景:

var hello = {
    hello: 'world',
    foo: 'bar'
};
var qaz = {
    hello: 'stevie',
    foo: 'baz'
}

var myArray = [];
myArray.push(hello,qaz);

现在我想要有一个indexOf对象,其中hello属性是'stevie' ,在这个例子中,它将是1

我是JavaScript新手,我不知道是否有一个简单的方法,或者如果我应该建立自己的功能来做到这一点。


我想你可以使用map函数在一行中解决它:

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

除IE以外的所有浏览器(非边缘)支持Array.prototype.findIndex。 但提供的polyfill很好。

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

地图解决方案没问题。 但是你每次搜索迭代整个数组。 这只是findIndex最糟糕的情况,一旦找到匹配就会停止迭代。


没有一个简洁的方法(当开发人员不得不担心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

只是一些说明:

  • 不要在数组的循环中使用...
  • 一旦发现你的“针”,一定要跳出循环或退出功能,
  • 注意对象的平等
  • 例如,

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

    在ES2015中,这非常简单:

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

    或者,对于较大的阵列可能具有更好的性能:

    myArray.findIndex(x => x.hello === 'stevie')
    
    链接地址: http://www.djcxy.com/p/10131.html

    上一篇: indexOf method in an object array?

    下一篇: jQuery selectors on custom data attributes using HTML5