javascript数组数字键导致多余的“未定义”

时间:2012-04-17 03:18:51

标签: javascript json

我有一个针对当前webApp的OOD系统,每个元素都有一个id,并放在每个页面的elements数组中。无论elemenet放置在哪个页面,每个新元素的id都是一个连续的数字,例如,如果我们在一个有7页的项目中有25个元素,那么无论它放在哪个页面,新元素的ID都将是26岁。 因此,例如,其中包含ID为1和4的2个元素的项目的第1页将是:

[undefined, proto.constructor, undefined, undefined, proto.constructor ]

通过这种方式重新构造元素非常容易,因为我需要的只是元素的页码和ID,我可以调用元素,例如pages [1] .elements [1]。但是我对这个方法的问题在于它导致最终JSON中过多的“未定义”元素,这使得JSON不必要地过大。有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:3)

使用JS对象而不是数组。它仍然可以有数字键(它们实际上是字符串,但对于数组也是如此)并且具有相同的恒定时间查找优势。

所以,而不是像这样的代码......

var objectsById = [];
objects[object.id] = object;

...而是像这样编写代码:

var objectsById = {};
objects[object.id] = object;

JSON输出将是简洁的(虽然不一定排序):

{ "42":"someserializablevalue", "17":"another JSON value" };

答案 1 :(得分:-1)

在分配的结尾或开头添加类似'_'的字符串

var id=2
var array['_'+id]=value

以命中方式而不是索引和映射所有元素,将被分配为关联数组ob元素

答案 2 :(得分:-2)

为什么不用空字符串初始化数组成员

像这样:

var arr = ['','','','','','','','','',''];

或者像这样:

var arr = new Array(10);
for(i=0;i<arr.length;i++)
   arr[i]='';