如果我有一个字符串白名单,我想检查用户输入我的javascript程序的所有内容,那么最有效的方法是什么?我可以只有一个数组并循环遍历它,直到找到匹配但是那是O(N)。有没有做得更好,并且不涉及任何类型的键值查找,只是检查该值是否存在?
编辑:我想我正在寻找的是相当于C ++中的一个集合,我可以检查一下我给出的值是否已经存在于集合中。
答案 0 :(得分:1)
对数组进行排序,使用二进制搜索进行查找。
或者
创建一个对象,其中键是项目,并使用哈希查找白名单[value]!= undefined
答案 1 :(得分:1)
我认为你会发现键值查找在性能上几乎与没有值的某种集合实现相同。 (许多标准库实际上只是使用地图实现一个集合)
答案 2 :(得分:1)
只需将其设为简单的js对象而不是数组。
var whitelist = {
"string1":true,
"string2":true
}
然后您只需检查if(whitelist[str])
以检查其是否可用。
或使用if(str in whitelist)
。
我希望第一个会有更好的性能(我没有验证过),但第二个更具可读性并且目的明确。因此,您选择哪种更合适。