我使用node.js作为我的服务器平台,我需要处理一个包含65,000个项目的非稀疏数组。
Javascript数组不是真正的数组,但实际上是哈希值。索引访问伴随着将索引转换为字符串,然后进行哈希查找。 (参见http://www.crockford.com/javascript/survey.html中的数组部分)。
所以,我的问题是这个。 node.js是否实现了一个真正的数组?确实花费我们来调整大小或删除项目但是使用真正的随机访问而没有任何索引到字符串然后哈希查找的那个?
感谢。
修改
我可能要求太多,但我的数组存储了Javascript对象。不是数字。我无法将其分解为许多类型数组,每个数组都包含数字基元或字符串,因为这些对象具有嵌套的子对象。尝试使用类型化数组将导致无法维护的代码。
EDIT2
我一定错过了什么。为什么它必须是全部或全部?要么没有真正的数组的真正的Javascript,要么没有Javascript好处的C样式扩展。拥有真正的Javascript(无类型)对象是否与Javascript的性质相矛盾? Java和C#有List<Object>
这基本上就是我要找的东西。 C#与List<DynamicObject>
更接近。
答案 0 :(得分:9)
Node.js有Javascript typed arrays:Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array
。
我认为他们就是你所要求的。
答案 1 :(得分:0)
Node.js确实提供了Buffer
class,这可能就是您所需要的:
Buffer
类似于整数数组,但对应于V8堆外的原始内存分配。Buffer
无法调整大小。
答案 2 :(得分:0)
您希望使用低级JavaScript(LLJS)直接以C风格操作所有内容。
http://mbebenita.github.com/LLJS/
请注意,根据上面的链接,LLJS数组更像您正在寻找的数组(真正的C类数组),而不是Javascript数组。
Node.js中有LLJS的实现可用,所以也许您不必编写自己的node.js C扩展。也许这个实现可以解决问题:https://github.com/mbebenita/LLJS
答案 3 :(得分:0)
不是本质上,不是。
但是,根据您的专业水平,您可以使用Node的C / C ++扩展工具编写“真正的”数组扩展。见http://nodejs.org/api/addons.html