我有一个30k +复杂JS对象的列表。列表中的每个对象都有一个名称属性。
我希望能够尽快通过名称找到对象而无需使用数据库。
关于表现,我想到了3个问题。
查询平面列表 - [{name: 'a'}, {name: 'b'}, {name: 'c'}]
或使用嵌套结构查询数据是否更快?{ group1 : [{name: 'a'}, {name: 'b'}], group2: [{name: 'c'}] }
?
第二个密切相关的问题,查询这个问题会更快:
`[{name: 'a'}, {name: 'b'}, {name: 'c'}]`
或者这个:
{ a: {name: 'a'}, b: {name: 'b'}, c: {name: 'c'} }
第三,原生JS代码更快还是我应该使用lodash(因为我的代码可能性能较差?)是否有任何lib可以帮助解决这个问题 - 无论是JavaScript库还是npm包。
答案 0 :(得分:2)
1)JS中的对象是字典,意味着obj.x
比#34更快(可能是即时);在列表中找到x"。但是,您不会因此而受益于此结构,您需要找到obj.*.name
name = "a"
,以便与在数组/列表中搜索相同。
2)如果在第二个例子中(x: {name: 'x'}
)x,则密钥始终与' x'相同。字符串(值name
)然后"发现"对象中的x与obj['x']
一样简单(与obj.x
相同),因为它是一个字典。它已经被索引了#34;按键。
3)_.find
决不会比自己循环数据更快或更慢,return
当你找到了什么时。
使用数据库。你可以使用内存中的JS"搜索"指数。我之前使用的是http://fusejs.io/,但没有使用过那么多数据。