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

问题描述:

我似乎无法找到一种商定的方法,通过单个字段(特别是诸如Mongo ID的大字符串字段)在对象数组中找到对象。例如我有以下的数组:JavaScript在数组中找到对象的最有效方法

[ 
    { 
     _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

*“但它似乎可以改进”*。你为什么这么认为? – dfsq

你有什么是线性搜索,它可能是可以,除非阵列以某种方式被下令做的最好。如果数组由_id字段排序,则可以对数组执行二进制搜索,将O(n)操作的查找更改为O(log(n))。

您可以使用过滤器:

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

注:.filter()是不是在IE8中实现,但你轻松应对,使用ES5-垫片。

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

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

取而代之的lambda表达式,你也可以使用一个回调函数。