Jam*_*son 2 javascript arrays v8 time-complexity
有谁知道Object.entries()Javascript的复杂性?基于这个问题,我猜想O(n)如果它是通过获取键和值作为数组然后将它们压缩在一起来实现的?
(此处为 V8 开发人员。)
简短回答:是的,Object.entries()在大多数情况下,的复杂度是 O(n)。
对于大对象(数千个属性),它是 O(n log n)。那是因为我们将大对象(以及某些“复杂”的小对象)的属性存储在字典中,而从该字典中检索所有键的复杂度Object.entries()为O(n),被指定为按属性创建顺序返回条目,所以我们必须对它们进行排序,这是一个 O(n log n) 操作。
(这也是如此Object.keys();您链接的问题/答案在这方面是不正确的。)
另外,请记住,由于必须为每个条目分配一个数组,因此Object.entries()在用于大对象时会留下相当多的垃圾。(虽然这并没有改变它的复杂性类。)
还有另一个问题,它可能更相关:检索一个属性的值可能意味着调用一个 getter,这个 getter 真的可以做任何事情,在这种情况下,所有的赌注都没有了。它甚至可能根本不会终止:
var o = {};
Object.defineProperty(o, "there's nothing O(n) about this",
{get: () => { while (true); }, enumerable: true});
console.log(Object.entries(o));
Run Code Online (Sandbox Code Playgroud)