【发布时间】:2011-10-12 09:22:22
【问题描述】:
我想保留一个我只会检查是否存在的字符串列表,例如:
corporatePlan = [
'canDeAuthorize',
'hasGmailSupport',
'canShareReports',
'canSummonKraken',
'etc'
]
所以,当用户尝试召唤海妖时,我会做corporatePlan.indexof('canSummonKraken') != -1 看看他是否可以。
一位同事建议将其存储为对象会更快:
"Corporate Plan" = {
'canDeAuthorize' : null,
'hasGmailSupport' : null,
'canShareReports' : null,
'canSummonKraken' : null,
'etc' : null
}
只需执行'canSummonKraken' in corporatePlan 之类的操作即可检查计划是否包含该密钥。这在经典的 CS 意义上是有意义的,因为“包含”当然是地图上的常数时间和数组上的线性时间。不过,这是否检查了数组和对象在 JS 中是如何实现的?
在我们的特殊情况下,元素少于 100 个,速度并不重要。但是对于更大的数组,哪种方式访问速度会更快?
【问题讨论】:
-
不要忘记对象文字中
nulls 后面的逗号。 -
@Fish:FWIW,我更新了我的答案,提供了第三种选择,我认为这是一种相当正常的方式。 -
检查这个基准:jsben.ch/#/Y9jDP