3

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

假设:

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

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

  • Array.indexOf(x)
  • 我的对象 [x] != null
  • 我的对象中的 x
  • 别的东西?
4

3 回答 3

3

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

于 2012-12-07T06:08:07.337 回答
2

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

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

于 2012-12-07T07:51:31.657 回答
1

我已经对本机 indexOf 和所需索引的二进制搜索进行了一些测试。这是 10 000 个项目数组的结果。

  • 价值 | 索引 | 二分查找
  • 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/

于 2017-03-01T11:44:16.180 回答