JavaScript在数组中查找对象的最有效方法

JavaScript Most Efficient Way to find Object in Array

本文关键字:有效 方法 对象 查找 数组 JavaScript      更新时间:2023-09-26

我似乎找不到一种商定的方法来通过单个字段在对象数组中查找对象,特别是像Mongo id这样的大字符串字段。例如,我有以下数组:

[
    {
        _id: "55e4a11251e4c7914426xxxx,
        name: 'John'    
    }, {
        _id: "55e4a11251e4c7914426yyyy",
        name: 'Jack
    }
]

我现在想创建一个函数,从_id相等的数组中返回对象。我有以下几点,但似乎还可以改进:

function getObject(searchedId, array) {
    for (var i = 0; i < array.length; i++) {
        if (array[i]._id === searchedId) {
            return array[i];
        }
    }
}

你所拥有的是一个线性搜索,这可能是最好的,可以做的,除非数组以某种方式排序。

如果数组按照_id字段排序,则可以对数组执行二进制搜索,将查找操作从O(n)更改为O(log(n))。

您可以使用filter:

function search(searchedId, array){
    var obj = array.filter(function ( obj ) {
        return obj._id === searchedId;
    })[0];
}

注意:.filter()在IE8中没有实现,但你可以使用ES5-shim轻松处理。

最简单的方法是使用find方法

var foundObj =  yourObjectArray.find((obj) => { return obj._id == id });

除了使用lambda表达式,还可以使用回调函数