【问题标题】:Javascript: Running time of search through Object?Javascript:通过对象搜索的运行时间?
【发布时间】:2014-01-27 15:44:10
【问题描述】:

我有一个 JavaScript 对象:
object1 = { "abc" : "def", "ghi" : "jkl" }

现在,当我写 object1["abc"] 时。此搜索是线性时间搜索,即 O(n) 还是恒定时间搜索,即 O(1)?

【问题讨论】:

标签: javascript object browser time-complexity


【解决方案1】:

在 Javascript 中访问数组/对象是 O(1) 操作。

【讨论】:

    【解决方案2】:

    嗯,我做了一个简单的程序来测试它,它没有显示恒定的访问时间。很可能还涉及其他一些事情 - 优化或内存管理或其他事情,但它清楚地表明依赖于属性的数量。

    对于具有 10 个属性的对象,完成 1 亿次访问大约需要 160 毫秒,对于具有 100k 属性的对象,大约需要 650 毫秒(在我的带有 Chrome 的 PC 上)。所以它看起来一点也不恒定,但确实,对于“正常”数量的属性,它可能并不重要。

    JS:

    function go(amount) {
      var object1 = {};
      for (var i = 0; i < amount; i++) {
        object1['id' + i] = i;
      }
    
      var start = new Date().getTime();
      var j = 0;
      for (var i = 0; i < 100000000; i++) {
        j += object1['id3'];
      }
      var end = new Date().getTime();
      console.log(j);
      document.getElementById('result').innerHTML = end - start;
    }
    

    HTML:

    <button onclick="go(10);">Run with 10 attributes</button>
    <button onclick="go(100000);">Run with 100 000 attributes</button>
    <br>
    The result is <span id="result">0</span> ms
    

    这里是link of Fiddle

    【讨论】:

    • 有趣的是,第一次访问 10-attributes 对象大约是 100ms,在您单击 100k 然后再次单击 10 后,它会失败到相同的 700ms。对我来说,这似乎是与内存相关的问题。
    • 我看到了一些不同的东西(Chrome、Win7)。第一次点击 10 attr 都在 120 到 160 之间,然后点击 100k attr 的任何数量都会产生 600-700 毫秒,然后当我点击回到 10 attr 时,我确实看到时间增加了,但所有时间都保持在 250 和280 毫秒。
    • @Erik:对,那是在 Chrome 27 中,在我更新到 32 后,我看到的数字与您的相似。因此,此问题已在此期间得到修复。
    • 另外,我在不同的浏览器中得到了完全不同且有趣的结果:jsperf.com/propaccess33
    • 这是一个非常酷的页面。我也看到了。它显示了 IE 是多么糟糕。
    猜你喜欢
    • 2018-02-18
    • 2021-10-31
    • 2023-04-04
    • 2012-09-30
    • 2021-05-26
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多