如何在Javascript/AS3中寻找列表或对象中元素的索引?由于这两种语言的语法相似,我需要同时了解这两种情况下的答案。
假设:
myArray = ["one", "two", "three"];
myObject = {one:1, two:2, three:3};
哪种方法最快?在什么情况下需要使用它或不需要使用它?
- Array.indexOf(x)(数组查找)
- myObject[x] != null(对象属性查找)
- x in myObject(对象键查找)
- 其他方法?
如何在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.indexOf
使用O(n)进行搜索,如果不经常进行搜索,则可以接受。检查存在性将是arr.indexOf(item) != -1
,仅获取索引arr.indexOf(item)
。