Javascript:最有效的方式来存储20,000个数字ID并检查它们?

时间:2016-07-23 01:52:33

标签: javascript

所以我有ID作为int32从0到20000,我需要在JavaScript中的数组。因此,数组可能长达20,000个项目。

然后我需要检查几个ID以查看它们是否在该列表中。

最有效的方式是什么,所以我们不会崩溃浏览器的内存?

2 个答案:

答案 0 :(得分:1)

如果要减少内存,请将数字存储在16位无符号整数的类型数组中,这样可以存储0到65535之间的数字。

然而,搜索会很慢。而且20000个号码不会浪费过多的记忆。

20000 * 64 bit = 1280000 bit = 160000 byte = 156.25 kibibyte

所以我会建议一个Set或一个对象。设置操作平均需要是次线性的。

var s = new Set();
s.add(id); // store id
s.has(id); // check id
s.delete(id); // remove id
s.size; // count ids
for(var id of s) {} // iterate ids, in insertion order
var s = Object.create(null);
s[id] = true; // store id
id in s; // check id
delete s[id]; // remove id
for(var id in s) {} // iterate stringified ids, in implementation-defined order

答案 1 :(得分:1)

如果您的数字范围有限,最有效的方法是将它们存储在打包位数组中,每个数字一位。位数组可以表示为Uint8Array,然后,检查数字N是否在数组中(=其位已设置),计算

array[N >> 3] & (1 < (N & 7))