【发布时间】:2014-01-27 15:44:10
【问题描述】:
我有一个 JavaScript 对象:
object1 = {
"abc" : "def",
"ghi" : "jkl"
}
现在,当我写 object1["abc"] 时。此搜索是线性时间搜索,即 O(n) 还是恒定时间搜索,即 O(1)?
【问题讨论】:
标签: javascript object browser time-complexity
我有一个 JavaScript 对象:
object1 = {
"abc" : "def",
"ghi" : "jkl"
}
现在,当我写 object1["abc"] 时。此搜索是线性时间搜索,即 O(n) 还是恒定时间搜索,即 O(1)?
【问题讨论】:
标签: javascript object browser time-complexity
在 Javascript 中访问数组/对象是 O(1) 操作。
【讨论】:
嗯,我做了一个简单的程序来测试它,它没有显示恒定的访问时间。很可能还涉及其他一些事情 - 优化或内存管理或其他事情,但它清楚地表明依赖于属性的数量。
对于具有 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
【讨论】: