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];
}
}
}
答
你有什么是线性搜索,它可能是可以,除非阵列以某种方式被下令做的最好。如果数组由_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表达式,你也可以使用一个回调函数。
*“但它似乎可以改进”*。你为什么这么认为? – dfsq