首页 > 解决方案 > 数组的性能包括与映射到对象并在 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

标签: javascriptarraysjsonperformancedictionary

解决方案


确实,对象查找发生在恒定时间 - 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测试。


推荐阅读