对象,数组或类似对象的数组

时间:2016-12-08 04:00:49

标签: javascript arrays json

在javascript中哪一个更有效率?在迭代期间哪一个更快?哪一个花在网络上的时间较短?

我不希望答案会基于附加到对象,数组或类似对象的数组的实用程序方法。

为了对我正在讨论的场景有所了解,请查看以下2个选项。

选项1

["A1", "A2", "A3"]

选项2

{"0":"A1", "1": "A2", "2": "A3", "length": 3}

哪一个在迭代期间更快?哪一个花在网络上的时间较短?

3 个答案:

答案 0 :(得分:0)

我认为数组是最好的,因为它们只是一个数组。如果使用对象,它还有许多其他属性可供获取。

但是不要误会我的意思,因为在正确的情况下,对象比数组更有用,但我认为获取最快的是数组。

答案 1 :(得分:0)

我不同意GreenHawk的回答。 JavaScript 中的数组只是具有数组原型的普通对象。因此,您的数据的索引实际上是整数=>数据

这可以通过以下代码段看到:

var arr = ["javascript", "is", "a", "strange", "language."]

delete arr["3"]; // because an array is actually a map of "indicies" to values, strings work as well here.
console.log(arr.length); //=> 5
console.log(arr);

就迭代而言,使用数组可能是您最好的选择,因为您的浏览器可能能够优化它(或者至少JS使迭代更容易)。

两者之间的大小/传输速率差异应该很小,因为数组的方法/属性是在其原型上定义的(类似于Java等经典语言中的超类),因此不会通过网络传输。 / p>

答案 2 :(得分:0)

  

在JavaScript中哪一个更有效率?

高效的方面是什么?存储器?

  

哪一个在迭代期间更快?

嗯,你必须以不同的方式迭代对象,所以它不是苹果对苹果。如果你想比较这两个循环:

for (value of option1);
for (key in option2) option[key];

第一个可能会更快,比如说25%。如果以不同的方式循环,对数组使用forEach,对对象使用Object.keys(option2).forEach,则差异可能更明显。如果数组稀疏,结果可能会有所不同。确切知道的唯一方法是运行基准测试,结果可能因引擎与发动机或发动机的一个版本而异。

  

哪一个花在网络上的时间较短?

数组形式较小(字节较少),因此需要较少的时间。然而,假设有效载荷是gzip压缩的,除非你在谈论成千上万的值,否则差异可能微不足道。

如果你的底层数据在语义上是一个数组,为什么不把它当作数组呢?