我似乎无法找到一种商定的方法来通过单个字段查找对象数组中的对象,特别是像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];
}
}
}
答案 0 :(得分:2)
你所拥有的是线性搜索,除非以某种方式对数组进行排序,否则它可能是最好的。如果数组按_id字段排序,则可以对数组执行二进制搜索,从而将查找从O(n)操作更改为O(log(n))。
答案 1 :(得分:1)
您可以使用过滤器:
function search(searchedId, array){
var obj = array.filter(function ( obj ) {
return obj._id === searchedId;
})[0];
}
注意:.filter()未在IE8中实现,但您可以使用ES5-shim轻松处理。
答案 2 :(得分:0)
这种最简单的方法是使用find方法
var foundObj = yourObjectArray.find((obj) => { return obj._id == id });
您也可以使用回调函数代替lambda表达式。