我有一个JavaScript对象:
object1 = {
"abc" : "def",
"ghi" : "jkl"
}
现在,当我写object1["abc"]
时。这种搜索是线性时间搜索,即O(n)还是恒定时间搜索,即O(1)?
答案 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