indexOf method in an object array?

前端 未结 27 2898
别跟我提以往
别跟我提以往 2020-11-22 02:18

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

Imagine this scenario:

var hello = {
    hello: \'world\',
    foo: \'ba         


        
27条回答
  •  南方客
    南方客 (楼主)
    2020-11-22 02:40

    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:

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

    For example,

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

提交回复
热议问题