indexOf method in an object array?

What's the best method to get the index of an array which contains objects?

Imagine this scenario:

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

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

Now I would like to have the indexOf the object which hello property is 'stevie' which, in this example, would be 1 .

I'm pretty newbie with JavaScript and I don't know if there is a simple method or if I should build my own function to do that.


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

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

Array.prototype.findIndex is supported in all browsers other than IE (non-edge). But the polyfill provided is nice.

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

The solution with map is okay. But you are iterating over the entire array every search. That is only the worst case for findIndex which stops iterating once a match is found.


There's not really a concise way (when devs had to worry about IE8) , but here's a common solution:

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

or as a function:

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

Just some notes:

  • Don't use for...in loops on arrays
  • Be sure to break out of the loop or return out of the function once you've found your "needle"
  • Be careful with object equality
  • For example,

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

    In ES2015, this is pretty easy:

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

    or, probably with better performance for larger arrays:

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

    上一篇: 为什么我们需要中间件来实现Redux中的异步流程?

    下一篇: 对象数组中的indexOf方法?