javascript - 数组的性能包括与映射到对象并在 JavaScript 中访问它
问题描述
根据 CS 的基本原理,search
未排序列表的功能必须在 O(n) 时间内发生,而对 HashMap 的直接访问将在 O(1) 时间内发生。
那么将数组映射到字典然后直接访问元素是否更高效,或者我应该只使用包含?这个问题专门针对 JavaScript,因为我相信这将归结为如何实现includes()
和{}
实现的核心实现细节。
let y = [1,2,3,4,5]
y.includes(3)
或者...
let y = {
1: true,
2: true
3: true
4: true
5: true
}
5 in y
解决方案
确实,对象查找发生在恒定时间 - O(1) - 所以使用对象属性而不是数组是一种选择,但如果你只是想检查一个值是否包含在集合中,那会更合适使用 a Set
,它是值的(通常是无序的)集合,也可以在线性时间内查找。(改用普通对象将要求您拥有除了您不关心的键之外的值Set
- 因此,请改用 a 。)
const set = new Set(['foo', 'bar']);
console.log(set.has('foo'));
console.log(set.has('baz'));
当您必须查找相同的多个值时,这将很有用Set
。但是,向 中添加项目Set
(就像向对象添加属性一样)是O(N)
,因此,如果您只想查找单个值,一次,这和对象技术都没有好处,您不妨只使用数组includes
测试。
推荐阅读
- javascript - 选择下拉菜单时自动填充文本框
- algorithm - 被编码测试难倒-令人发指的问题-请提出建议
- c++20 - 将 libfmt 与旧版 API 一起使用
- cumulocity - 使用 Angular cli 时代理到 Cumulocity 租户
- python - 在 PyTorch Lightning 中运行多个模型的问题
- reactjs - Formik,是的,formik-material-ui 注册表单在单击表单时显示电子邮件错误
- php - PHP:在 5.2.5 中需要 json_encode() 5.4 功能
- mysql - 相关子查询总是引发错误,找不到原因
- xml - 需要从另一个 XML 文件元素中获取属性值
- python - 循环遍历python变量