5

如果我有一个字符串白名单,我想检查用户输入到我的 javascript 程序中的所有内容,那么最有效的方法是什么?我可以只拥有一个数组并循环遍历它,直到找到匹配项,但那是 O(N)。有没有更好的方法,并且不涉及任何类型的键值查找,只是检查该值是否存在?

编辑:我想我正在寻找的是相当于 C++ 中的一个集合,我可以在其中检查我给定的值是否已经存在于集合中。

4

3 回答 3

1

对数组进行排序,使用二进制搜索进行查找。

或者

创建一个 key 为 item 的对象,并使用哈希查找 whitelist[value] != undefined

于 2013-03-21T18:47:50.840 回答
1

我想你会发现键值查找在性能上与某种没有值的集合实现几乎相同。(许多标准库实际上只是使用映射实现了一个集合)

于 2013-03-21T18:48:12.687 回答
1

只需让它成为一个简单的 js 对象而不是数组。

var whitelist = {
  "string1":true,
  "string2":true
}

然后你可以检查if(whitelist[str])它是否可用。

或使用if(str in whitelist).

我希望第一个性能稍好一些(我还没有验证过),但第二个更易读并且目的更明确。因此,您选择哪个更合适。

于 2013-03-21T18:48:53.000 回答