【发布时间】:2016-05-24 16:54:08
【问题描述】:
我正在使用的一个文件是在我开始在这里工作很久之前制作的,它有一个包含 53 个不同数值的列表。但它将它们全部列为用逗号分隔的字符串,例如:
var numbers = "1,2,3,4,5,...,48,49,50";
在脚本的后面,当检查传入的变量是否存在时,它使用:
if(numbers.indexOf(String(x),0) < 0) {/*do stuff*/} else {/*do other stuff*/}
虽然这可行,但我不禁想知道为什么选择这种方式而不是使其成为一个数字数组。就性能而言,这会比按照当前设置的方式进行更优化吗?
【问题讨论】:
-
为什么?因为你之前的那个人认为这是个好主意。如果您经常查找,那么您应该将其转换为数组since
indexOfis pretty slow,并且数据似乎暗示了一个数组。 -
可能是在支持数组 indexOf 之前编写的。但是字符串 indexof 存在缺陷,因为它会进行部分匹配。
-
如果字符串不包含
4并且包含14,如果您检查了4的索引,它将在14中返回4的索引。但如果是数组,它将返回-1. -
我建议使用以数字为键的对象。访问速度比 indexOf 快得多。
-
或者事件最好使用 ES6 set,因为这正是它的设计目的。
标签: javascript arrays string if-statement