On Mon, Oct 22, 2018 at 2:42 AM Rob Ede <[email protected]> wrote: > Calculating this on plain objects could be a O(1) operation: > > Empty objects are initialized with maxDepth 0 and are set to 1 when a > primitive property is added. > If an object property is added the maxDepth is set to 1 + > maxDepth(newObjectProperty)`instead of it being calculated Ïevery time > .maxDepth is accessed (much like how Array#length works).
That's not enough. Any time you add/change/remove a property that would alter the depth of an object, you also need to update the depth of every *parent* object containing it. This isn't "actually" O(1) - it's O(1) on *access*, but only because it's amortized the cost over every mutation instead. We don't generally consider that trade-off worthwhile, particularly for things like this that would have fairly specialized/limited use-cases in the first place. (Plus, it still doesn't answer what the depth is of an object with a cyclic reference.) ~TJ _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

