在Javascript / AS3中查找列表或对象中项目索引的最快方法是什么?我之所以这样,是因为这两种语言的语法相似。
假设:
myArray = ["one", "two", "three"];
myObject = {one:1, two:2, three: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项阵列的结果。
测试在节点v8环境中完成,但似乎本机indexOf正在使用循环来查找所需的索引。 以下是二进制搜索http://oli.me.uk/2013/06/08/searching-javascript-arrays-with-a-binary-search/
的链接