javascript - 数组的性能包括与映射到对象并在 JavaScript 中访问它

标签 javascript arrays json performance dictionary

根据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) - 所以使用对象属性而不是数组是一种选择,但如果你只是想检查一个值是否包含在集合中,那会更合适使用 Set ,它是一个(通常是无序的)值的集合,也可以在线性时间内查找。 (如果使用普通对象,除了键之外,您还需要有值,而您并不关心 - 因此,请改用 Set。)

const set = new Set(['foo', 'bar']);
console.log(set.has('foo'));
console.log(set.has('baz'));

当您必须为同一个 Set 查找多个值时,这将很有用。 .但是,将项目添加到 Set (就像向对象添加属性一样)是O(N) ,所以如果你只是要查找一个值,一次,这和对象技术都没有好处,你也可以只使用数组 includes测试。

关于javascript - 数组的性能包括与映射到对象并在 JavaScript 中访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53423914/

相关文章:

javascript - 参数 '[controllerName]' 不是 NaNunction,在转换为 TypeScript 时未定义

javascript检测两个相等的参数

javascript - 修复了标题和自动滚动到 Div 的问题

javascript - 创建嵌套数组javascript

python - 沿轴折叠掩码数组 - Python 中的 Numpy

json - 如何从 Golang 中的 HTTP GET 请求发送 JSON 响应?

jQuery/AJAX - 响应格式

javascript - Node.js Object 对象没有方法 'hasOwnProperty'

arrays - 风帆 :how to convert array of array to json object

java - 如何读取已有的时间戳?