在数组/对象中查找项目的最快方法

时间:2012-12-07 05:19:35

标签: javascript arrays actionscript-3

在Javascript / AS3中查找列表或对象中项目索引的最快方法是什么?我之所以这样,是因为这两种语言的语法相似。

假设:

myArray = ["one", "two", "three"];
myObject = {one:1, two:2, three:3};

哪个是最快的,你想要它在哪种情况下?

  • Array.indexOf(x)的
  • myObject [x]!= null
  • x in myObject
  • 别的什么?

3 个答案:

答案 0 :(得分:3)

使用对象听起来不是一个好主意,因为重新索引将是一个繁重的操作,并将消除访问性能增益(如果有的话)。 Array.indexOf(x)似乎是要走的路。

答案 1 :(得分:1)

使用高效的哈希表实现对象,因此查找键将是O(1)。如果您的“查找”值是字符串并且它们的位置是静态的,那么这将非常快。可以使用key in obj检查布尔存在,获取存储的索引将为obj[key] || -1

如果您正在搜索更复杂的对象(无法轻松地将其序列化为字符串),则需要使用数组。 Array.indexOf使用O(n)进行搜索,如果您不经常这样做,这是可以的。检查是否存在arr.indexOf(item) != -1,索引只是arr.indexOf(item)

答案 2 :(得分:1)

我已经对原生indexOf和所需索引的二进制搜索做了一些测试。 以下是10 000项阵列的结果。

  • 值| IndexOf |二进制搜索
  • 1 | 0.003 | 0.013
  • 5000 | 1.546 | 0.016
  • 9990 | 3.105 | 0.015

测试在节点v8环境中完成,但似乎本机indexOf正在使用循环来查找所需的索引。 以下是二进制搜索http://oli.me.uk/2013/06/08/searching-javascript-arrays-with-a-binary-search/

的链接