基于唯一ID搜索json对象

时间:2016-09-06 15:03:04

标签: json node.js

我有很多像json对象。我希望能够通过例如lookup["22"]然后得到下面的对象。但是,我不确定最好的方法是什么,效果如何?

var data = [
    {
        "id": "22",
        "Email": "a@test.com"
    },
    {
        "id": "11",
        "Email": "test@test.com"
    }
],

2 个答案:

答案 0 :(得分:1)

使用Array.prototype.find(),您可以循环数组并找到第一项匹配条件。这样你就可以编写一个函数来进行查找(使用ES6语法):

const lookup = id => data.find(d => d.id === id);
lookup('22');

并非所有环境都支持它,但它应该在节点中工作。

答案 1 :(得分:1)

我假设您拥有内存中的JSON对象,而不是以允许您创建lookup index的方式存储。

天真的解决方案是使用Array.prototype.find,它将遍历整个集合,在每次查找时给我们O(n)时间。但是,如果您可以构建如何格式化此JSON,那么从长远来看,您可能会节省一些时间。如果可以保证唯一ID,请考虑创建这样的结构:

const data = {
    "22": {
        "id": "22",
        "Email": "a@test.com"
    },
    "11": {
        "id": "11",
        "Email": "test@test.com"
    }
}

然后你可以像上面所示那样做:data[id]。如果您从刚性API获取此数据,那么如果您进行多次查找而手动变更数据可能仍然值得,因为索引的成本与查找单个文档的时间相同。