JS中的大部分performanceforms

我想有一个唯一的string列表,所以每次我得到一个新的string,我应该推到列表上,我需要检查列表是否包含该项目之前推它在列表上。 这似乎是不正常的。

但是,如果我使用散列结构并将项目存储为键,有什么方法可以使这个更高性能比简单的数组?

我想我只是想知道什么是最高性能的设置数据结构存在于JavaScript中。

是的,使用Set将比检查现有值(O(1)对于一个数组的O(n))更快。

var s = Set(); s.add(1); // s is (1) s.add(2); s.add(3); s.add(1) s.add(1) // s is now (1, 2, 3) 

在现代浏览器(Chrome 38+,IE11 +)中定义了Settypes,在这里logging: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set

否则,在JavaScript中, Object值(ECMAScript中的一个基本types)在内部被实现为散列表,因此最快的概念性“ HashSet ”结构将作为散列表的泛化而存在,而忽略值types。

这是我怎么做(如果Set不可用):

 function StringSet() { this.values = {}; this.add = function(value) { value = value.toUpperCase(); // use UpperCase for string normalization because of how casing rules work in different languages, especially Turkish this.values[ value ] = true; // use bool values as stubs }; this.contains = function(value) { value = value.toUpperCase(); return value in this.values; // JavaScript has a fast `in` operator which runs in `O(1)` time } } var foo = new StringSet(); foo.add("bar"); assert( foo.contains("bar") );