Javascript:通过Object搜索的运行时间?

时间:2014-01-27 15:44:11

标签: javascript object browser time-complexity

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

好吧,我做了一个简单的程序测试,并没有显示持续的访问时间。最有可能涉及到其他一些事情 - 优化或内存管理等等,但它清楚地表明了对属性数量的依赖。

对于具有10个属性的对象,进行1亿次访问需要大约160 ms,对于具有100k属性的对象,需要大约650 ms(在我的PC上使用Chrome)。所以它看起来并不常见,但确实如此,对于“正常”数量的属性来说,它可能并不重要。

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