数组长度Vs数组中的值数

时间:2017-05-17 11:25:50

标签: javascript arrays

最近我不得不在大型索引处创建一个包含值的数组(由于插件限制)。 例如:

var names[100000] = "a";
var names[150000] = "b" ... and so on till 5 large indexes.

并且在所有值之间未定义names[100001] //undefined.

现在我怀疑是因为数组只有5个元素,但如果我这样做

names.length //it is 300001 

它是一个大型数组。我没有迭代这个数组,也没有运行任何循环。我将直接通过数组中定义的索引获取值。

因此,这个结构会在浏览器上产生任何显着的性能差异,或者只要数组中的值数量少于其索引而不涉及迭代就可以使用它。

由于

2 个答案:

答案 0 :(得分:2)

区分数组与普通对象的唯一区别是它的length属性及其行为方式(当然还有一些特定于数组的方法)。 length值只会随着某些操作而增加,例如设置数字属性或push新元素。简而言之,这就是它。将属性100000设置为值时,数组实际上不包含100000个元素,所有发生的事情都是您设置了一个属性和{{1}的值相应调整。

所以,不,它不会对性能产生很大影响,除非有人使用length实际迭代数组。

答案 1 :(得分:-1)

您可以使用插件创建一个长度数组,并在本地使用对象来限制迭代。在应用了所有处理之后,将值复制到数组并将其发送到插件的函数。

保持具有所需长度的数组作为缓冲区

var buffer = new Array(20000);

在内部使用对象

var data = {};

为对象分配值

data[10001] = "foo";

对对象应用转换或数据处理后,将数据复制到缓冲区

for (key in data){
    buffer[key] = data[key];
}

将缓冲区发送到插件。如果需要,可以清除数据。

通过这样做,您将不会比您处理的实际数据迭代更多。