2

我使用 node.js 作为我的服务器平台,我需要处理一个包含 65,000 个项目的非稀疏数组。

Javascript 数组不是真正的数组,但实际上是散列。索引访问伴随着将索引转换为字符串,然后进行哈希查找。(请参阅http://www.crockford.com/javascript/survey.html中的数组部分 )。

所以,我的问题是这个。node.js 是否实现了一个真正的数组?确实需要我们调整大小或删除项目的成本,但真正的随机访问没有任何 index-to-string-then-hash-lookup ?

谢谢。

编辑

我可能要求太多,但我的数组存储 Javascript 对象。不是数字。而且我不能把它分成许多类型的数组,每个数组都包含数字原语或字符串,因为对象有嵌套的子对象。尝试使用类型化数组将导致无法维护的代码。

编辑2

我肯定错过了什么。为什么它必须是全有或全无?没有真正数组的真正 Javascript 或没有 Javascript 优势的 C 样式扩展。拥有一个真正的 Javascript(无类型)对象数组是否与 Javascript 的本质相矛盾?Java 和 C#List<Object>基本上是我正在寻找的。C# 更接近于List<DynamicObject>.

4

4 回答 4

8

Node.js 具有Javascript 类型的数组Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array.

我认为他们是你所要求的。

于 2012-09-12T16:12:05.777 回答
0

Node.js 确实提供了一个可能是您正在寻找的Buffer类:

ABuffer类似于整数数组,但对应于 V8 堆外的原始内存分配。ABuffer无法调整大小。

于 2012-09-12T16:07:28.957 回答
0

您想使用低级 JavaScript (LLJS) 以 C 风格直接操作所有内容。

http://mbebenita.github.com/LLJS/

请注意,根据上面的链接,LLJS 数组更像您正在寻找的数组(真正的 C 类数组),而不是 Javascript 数组。

Node.js 中有一个 LLJS 的实现可用,所以也许你不必编写自己的 node.js C 扩展。也许这个实现会成功:https ://github.com/mbebenita/LLJS

于 2012-09-12T16:13:44.870 回答
0

本质上不是,不是。

但是,根据您的专业水平,您可以使用 Node 的 C/C++ 扩展工具编写“真正的”数组扩展。见http://nodejs.org/api/addons.html

于 2012-09-12T16:18:33.877 回答