2016-07-23 19 views
1

所以我有ID为int32从0到20000,我需要在JavaScript中的数组。所以这个阵列可能长达20,000个项目。Javascript:最有效的方法来存储20,000个数字ID并检查它们吗?

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

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

+0

你尝试过什么?你能告诉我们一些代码吗? – tptcat

+0

也许这个其他问题可能会有所帮助。它也指最有效的方法来检查一个对象是否可以在数组中找到。 http://stackoverflow.com/questions/237104/how-do-i-check-if-an-array-includes-an-object-in-javascript – Davis

+0

20000的数组可能是NCSA Mosaic的问题,但我怀疑你今天会用任何浏览器“崩溃浏览器的内存”(不管这意味着什么) –

回答

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

如果你的号码的范围是有限的,最有效的方法是将它们存储在打包位阵列,每个号码一位。该位阵列可以被表示为Uint8Array,然后,检查数量N是在阵列(=其位设置),计算

array[N >> 3] & (1 < (N & 7)) 
相关问题