这个问题与如何高效地计算JavaScript对象中键/属性的数量?几乎相同。
我想知道一个额外的信息:如何以“常数时间”确定对象中键的数量? 我主要关心在Node.JS中执行此操作,因为大多数浏览器上的对象并不太大,不会成为主要问题。
编辑:
在Google Chrome和Node.JS中,Object.keys(obj).length
按线性时间O(n)返回(即取决于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
.length
是 O(n)。 - RaynosObject.keys(o).length
的时间复杂度是O(n)。 在数组上使用.length
的时间复杂度是O(1)。 - Raynos