Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:通过对象进行搜索的运行时间?_Javascript_Object_Browser_Time Complexity - Fatal编程技术网

Javascript:通过对象进行搜索的运行时间?

Javascript:通过对象进行搜索的运行时间?,javascript,object,browser,time-complexity,Javascript,Object,Browser,Time Complexity,我有一个JavaScript对象: 对象1={ “abc”:“def”, “ghi”:“jkl” } 现在,当我编写object1[“abc”]时。这个搜索是线性时间搜索,即O(n)还是恒定时间搜索,即O(1)?在Javascript中访问数组/对象是一个O(1)操作。在Javascript中访问数组/对象是一个O(1)操作。我已经编写了一个简单的程序来测试这一点,它没有显示恒定的访问时间。很可能还涉及到其他一些事情——优化或内存管理之类的,但它清楚地显示了对属性数量的依赖 对于具有10个属

我有一个JavaScript对象:

对象1={
“abc”:“def”,
“ghi”:“jkl”
}


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

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

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

我已经编写了一个简单的程序来测试这一点,它没有显示恒定的访问时间。很可能还涉及到其他一些事情——优化或内存管理之类的,但它清楚地显示了对属性数量的依赖

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

JS:

函数go(金额){
var object1={};
对于(变量i=0;i
HTML:

使用10个属性运行
使用100000个属性运行

结果是0毫秒

这是

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

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

JS:

函数go(金额){
var object1={};
对于(变量i=0;i
HTML:

使用10个属性运行
使用100000个属性运行

结果是0毫秒

下面是大概的重复:大概重复的可能重复:有趣的是,第一次访问10个属性对象大约是100毫秒,当您单击100k,然后再次单击10后,它会下降到相同的700毫秒。在我看来,这是一个与内存相关的问题。我看到了一些不同的东西(Chrome、Win7)。第一次点击10个attr都在120到160之间,然后点击100k attr的任何数量都会产生600-700毫秒,当我再点击回10个attr时,我确实看到了时间的增加,但所有时间都保持在250到280毫秒之间。@Erik:对,这是在Chrome 27中,在我更新到32之后,我看到了与你类似的数字。同时,我在不同的浏览器中得到了非常不同和有趣的结果:这是一个非常酷的页面。我也看到了。有趣的是,当你第一次访问10个属性的对象大约是100毫秒时,当你点击100k,然后再点击10次后,它会下降到同样的700毫秒。在我看来,这是一个与内存相关的问题。我看到了一些不同的东西(Chrome、Win7)。第一次点击10个attr都在120到160之间,然后点击100k attr的任何数量都会产生600-700毫秒,当我再点击回10个attr时,我确实看到了时间的增加,但所有时间都保持在250到280毫秒之间。@Erik:对,这是在Chrome 27中,在我更新到32之后,我看到了与你类似的数字。同时,我在不同的浏览器中得到了非常不同和有趣的结果:这是一个非常酷的页面。我也看到了。这也说明了IE是多么糟糕。
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;
}
<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