JavaScript中include()函数的时间复杂度

Nir*_*ary 11 javascript

我有一个包含某些字符串的哈希值的数组,我不希望我的数组中有重复值,所以我使用这样的if逻辑

if(!arrayOfHash.includes(hash_value)){
   arrayOfHash.push(hash_value); 
}
Run Code Online (Sandbox Code Playgroud)

我想知道JavaScript中includes()函数的复杂性.它是线性搜索功能还是修改后的搜索功能?

Yur*_*nko 8

规范将此功能描述为线性搜索。Array.prototype.includes

  1. 让O成为?ToObject(此值)。

  2. 让伦成为?ToLength(?Get(O,“ length”))。

  3. 如果len为0,则返回false。
  4. 让n成为?ToInteger(fromIndex)。(如果未定义fromIndex,则此步骤将产生值0。)
  5. 如果n?0,则令k为n。
  6. 否则n <0,令k为len + n。如果k <0,则令k为0。
  7. 重复,当k <len ... 将k增加1。

在一般情况下,这是一个相当合理的选择(列表未排序,列表不统一,您不维护列表本身以及其他数据结构)。

  • @garrettmac 线性搜索是“O(n)”,对。我并不是说它是“O(1)”。顺便说一句,是什么让你这么想? (2认同)