5

int我需要一个将(s)映射到(s)的Javascript(哈希图或其他)中的高性能映射string。在 dom 准备好后,该地图将用于构建网页的某些部分。我知道简单的 javascript 对象也可以像地图一样工作,但我需要以最佳性能工作。

我想通过在从服务器生成响应页面的同时将字符串附加到网页来一次使用所有数据对初始化地图。

有什么方法可以提高整数字符串对的 javascript 映射的性能,或者是否有相同的实现?

--

使用 jQuery 1.7

4

3 回答 3

10

好的,我会在这里发布它,因为它更像是一个答案:

使用数组。考虑到任何实现都必须使用 js 基元和对象,您将很难找到比这更高效的东西。

大多数(全部?)javascript 实现中的数组可能是稀疏的。因此 array.length 将返回最后一个元素的索引 + 1,但在稀疏情况下,数组不会分配所有元素,并且将使用对象属性语义来访问它的元素(意思是,它实际上是一个以整数作为键的哈希表)。

它基本上为您提供了您正在寻找的行为。

如果是负整数,请使用第二个数组。

关于单个语句初始化:您通常不能这样做,因为它基于隐式知道项目索引。

您可以做的是沿线附加一些内容:

 var arr = [];

 arr[int1] = val1;
 arr[int2] = val2;
 arr[int3] = val3;
 arr[int4] = val4;
 ...
 arr[intn] = valn;

我的意思是你必须以某种方式列出 (Number, String) 对。

于 2012-10-25T16:22:47.640 回答
0

请查看这个jperf 测试用例,并得出你的结论。对象也是稀疏的。数组只是专门的对象,除了其他内容外,它们也说明了它们自己的长度。

于 2015-09-09T20:01:10.410 回答
-1

我认为你应该使用以下 var l_map = {};

添加元素使用 l_map[<your integer>] = <your string>

并检索是 var l_value = l_map[<your integer>];

这是解决您的问题的一种方法。

第二种方法非常简单,只需使用数组(或列表),因为它根据位置存储值,如下所示: var l_array = [];

在最后一次添加元素使用:l_array.push(<your string>); 在指定位置添加元素:l_array.splice(<position>,0,<your string>);

并检索使用:l_array[<posit>];

于 2012-10-25T10:15:58.150 回答