在Javascript / AS3中查找列表或对象中项目索引的最快方法是什么?我问这两种语言是因为这两种语言的语法相似。
假设:
myArray = ["one", "two", "three"];
myObject = {one:1, two:2, three:3};
哪个是最快的,在哪种情况下你想要还是不想要?
- Array.indexOf(x)
- 我的对象 [x] != null
- 我的对象中的 x
- 别的东西?
在Javascript / AS3中查找列表或对象中项目索引的最快方法是什么?我问这两种语言是因为这两种语言的语法相似。
假设:
myArray = ["one", "two", "three"];
myObject = {one:1, two:2, three:3};
哪个是最快的,在哪种情况下你想要还是不想要?
使用对象听起来不是一个好主意,因为重新建立索引将是一项繁重的操作,并且会消除访问性能的提升(如果有的话)。Array.indexOf(x) 似乎是要走的路。
对象是使用高效的哈希表实现的,因此查找键将是 O(1)。如果您要“查找”的值是字符串并且它们的位置是静态的,那么这将非常快。可以使用 来检查布尔值是否存在key in obj
,获取存储的索引将是obj[key] || -1
。
如果您正在搜索更复杂的对象(不容易序列化为字符串),则需要使用 Array. Array.indexOf
使用 O(n) 进行搜索,如果您不经常这样做也可以。检查是否存在arr.indexOf(item) != -1
,只是获取索引arr.indexOf(item)
。
我已经对本机 indexOf 和所需索引的二进制搜索进行了一些测试。这是 10 000 个项目数组的结果。
测试是在节点 v8 环境中完成的,但似乎本机 indexOf 正在使用循环来查找所需的索引。这是二进制搜索的链接http://oli.me.uk/2013/06/08/searching-javascript-arrays-with-a-binary-search/