此問題與How to efficiently count the number of keys/properties of an object in JavaScript?幾乎完全相同。有效計算JavaScript中對象的鍵/屬性數
我想知道一個額外的信息:什麼是「恆定時間」的方式來確定一個對象中的鍵的數量?我最關心的是在Node.JS中這樣做,因爲瀏覽器上的大多數對象都不是太大而不值得擔心。
編輯: 看來,線性時間爲O(n)在谷歌瀏覽器和在Node.js的Object.keys(obj).length
返回(即依賴於密鑰的obj
數)。有更好的O(1)方法嗎?
我做了一些測試中的Node.js(源是下面)
var tests = [10e3, 10e4, 10e5, 10e6]
for(j in tests) {
var obj = {};
for(i = 0; i < tests[j]; i++)
obj[i] = i;
console.time('test' + tests[j]);
Object.keys(obj).length;
console.timeEnd('test' + tests[j]);
}
對於n = 10E3,10E4,10E5,10E6 ...結果是:
test10000: 5ms
test100000: 20ms
test1000000: 371ms
test10000000: 4009ms
您是否嘗試過測試? – Blender
沒有。我今天感覺很慵懶...:/我想是星期一的例子。 – BMiner
我懷疑從調用「Object.keys()」的結果中獲取「.length」是恆定時間,但我也懷疑調用「Object.keys()」在屬性數量上是線性的。 – Pointy