2015-10-06 57 views
4

我似乎無法找到一種商定的方法,通過單個字段(特別是諸如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

回答

2

你有什麼是線性搜索,它可能是可以,除非陣列以某種方式被下令做的最好。如果數組由_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-墊片。

0

這最簡單的方法是使用find方法

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

取而代之的lambda表達式,你也可以使用一個回調函數。

相關問題