Javascript:通过对象进行搜索的运行时间?
我有一个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个属
对象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