使用数组的对象与使用数组的对象的性能-JavaScript

使用数组的对象与使用数组的对象的性能-JavaScript,javascript,big-o,Javascript,Big O,我已经用JS做了很多算法,在其中一些算法中,创建一个对象(字典)比创建一个数组更有效,可以更快(常数查找O(1)或O(N)) 例如 比拥有更有效 const items1 = [ ['a', 2], ['b', 2] ] 在时间和(空间?)复杂性方面进行数据查找 但是如果我在对象中有一个数组作为值呢?它是否比只拥有一个阵列还要快 const items1 = { 1: [['a', 2]], 2: [['b', 2]] } 在某些情况下,创建一个对象(字典)以

我已经用JS做了很多算法,在其中一些算法中,创建一个对象(字典)比创建一个数组更有效,可以更快(常数查找O(1)或O(N))

例如

比拥有更有效

const items1 = [
    ['a', 2],
    ['b', 2]
]
在时间和(空间?)复杂性方面进行数据查找

但是如果我在对象中有一个数组作为值呢?它是否比只拥有一个阵列还要快

const items1 = {
    1: [['a', 2]],
    2: [['b', 2]]
}
在某些情况下,创建一个对象(字典)以更快地(常数查找O(1)或O(N))比创建一个数组更有效

JavaScript对象不仅仅是简单的字典。但是,是的,在对象上按名称查找属性比在数组中搜索匹配项快得多。(而在数组中查找特定条目,例如
a[0]
,即使不比在对象中查找属性快,也同样快,因为数组是对象[更多,但可以进一步优化为真正的数组。)

但是如果我在对象中有一个数组作为值呢?它是否比只有一个数组还要快

const items1 = {
    1: [['a', 2]],
    2: [['b', 2]]
}
不可能。如果你这样做,那么你必须:

  • 查找对象上的属性以获取数组
  • 在数组中查找所需内容
  • 而如果只使用数组,则不需要步骤1


    旁注:您有太多的
    [
    ]
    s,除非您需要一个属性值为包含数组的数组的对象。因此:

    const items1 = {
        1: ['a', 2],
        2: ['b', 2]
    }
    

    你把复杂性和效率混为一谈。你的第一个例子不可能比第二个更有效。“更快”是为了什么?如果你能写
    items1[foo]
    ,那几乎是瞬间的。如果你需要写
    items1.find(i=>i[0]==foo)
    ,这会慢得多。在对象中包含键值对基本上总是比将它们存储为2元素数组更有效。按键值查找值是(的一部分)在JS中使用对象的目的是,引擎将始终优化此常用功能。它们可能不会优化遍历数组并匹配第一个元素以便以相同的方式查找第二个元素。因此最好的是类似const items1={'1':'a2','2':'b2'}的内容?没有“best”所以最好是像const items1={'1':'a2','2':'b2'}?@totalnoob-我不明白你想比较什么。