JavaScript快速查找数据结构?

use*_*145 2 javascript

我有一个按字母顺序排列的109582个字符串数组.我的Web应用程序将对数组中是否包含给定字符串进行大量快速检查.显然我可以创建一个包含哈希表或二叉树的包装类,但是我可以使用任何本机JavaScript数据结构吗?

Qwe*_*rty 10

有各种合适的结构和方法,请参阅下面它们的执行方式。

大批

  • for环形
  • for循环(反转)
  • array.includes(target)

  • set.has(target)

目的

  • obj.hasOwnProperty(target)
  • target in obj <-最快
  • obj[target] <-最快

地图

  • map.has(target)

2024 年 1 月的结果,Chrome 121

这个结果有趣的是,速度map.has突然变慢到 的相同速度set.has
在此输入图像描述

2022 年 2 月的结果,Chrome 98

在此输入图像描述

2021 年 1 月的结果,Chrome 87

在此输入图像描述


该答案迁移自/sf/answers/4592297111/

  • 值得注意的是,虽然 `map` 确实较慢,但您可以映射 `&lt;any*&gt;:&lt;any*&gt;`,而 Object 只允许 `&lt;string&gt;:&lt;any*&gt;` _(我知道问题特定于字符串,但由于你的回答是如此彻底,我忍不住强调了地图'性能权衡背后的原因)_ (3认同)

geo*_*org 5

当然.制作一个字典对象

dict = {
  string1: 1,
  string2: 1,
etc
Run Code Online (Sandbox Code Playgroud)

它保证提供O(1)查找时间.

  • Big O表示法不是唯一的问题.壁时间测量很重要.我建议OP时间来测试是否使用一个哈希/对象更好,或者他是否应该至少为每个首字母创建一个哈希值. (2认同)