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