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

4

我似乎找不到一种公认的方法,可以通过一个单一字段在对象数组中查找对象,特别是像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];
        }
    }
}

3
为什么你这样认为呢?"but it seems like it could be improved upon"。 - dfsq
3个回答

3

您所拥有的是一种线性搜索方式,除非该数组以某种方式排序,否则这可能是最好的方法。如果该数组按_id字段排序,则可以在数组上执行二进制搜索,这将将查找操作从O(n)操作更改为O(log(n))操作。


1
您可以使用过滤器:

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

注意:.filter() 在 IE8 中未实现,但您可以使用 ES5-shim 轻松解决这个问题。

0

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接