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).

On 22 Oct 2018, at 00:58, Siegfried Bilstein <[email protected] 
<mailto:[email protected]>> wrote:

> Wouldn't calculating the depth open up objects for abuse? Assuming the max 
> depth is calculated with a BFS, it seems like you end up with a potentially 
> expensive BFS in the standard. Something safer may be  'hasDepth(int n)' or a 
> 'depthLessThan(int n)'.
> 
> On Sun, Oct 21, 2018 at 13:51 Jordan Harband <[email protected] 
> <mailto:[email protected]>> wrote:
> What would it report on `obj` with `const a = {}; const obj = { a };`? What 
> about with `const obj = { get a() { return Math.random() > 0.5 ? obj : {}; } 
> };`?
> 
> This seems like something you could do yourself as a function.
> 
> On Sun, Oct 21, 2018 at 7:30 AM Isiah Meadows <[email protected] 
> <mailto:[email protected]>> wrote:
> Are there other use cases for this? This reason doesn't really seem 
> compelling.
> 
> (Not TC39, but I wouldn't expect this to be considered without a way stronger 
> use case.)
> On Sun, Oct 21, 2018 at 09:45 Oliver Dunk <[email protected] 
> <mailto:[email protected]>> wrote:
> I’d love to see some sort of `maxDepth` property on objects.
> 
> For `{}`, it would return `0`.
> In the case of `{keyOne: true}`, it would return `1`.
> For `{keyOne: {anotherKey: false}, keyTwo: false}`, it would return `2`.
> 
> My particular use case is validating a JSON payload sent by a user to prevent 
> abuse. I don’t want to force a particular structure or set of keys, but I do 
> want to make sure the level of nesting doesn’t get silly.
> 
> The code to implement this is fairly short, but looks a bit messy. It’d be 
> really nice to have a property instead.
> _______________________________________________
> es-discuss mailing list
> [email protected] <mailto:[email protected]>
> https://mail.mozilla.org/listinfo/es-discuss 
> <https://mail.mozilla.org/listinfo/es-discuss>
> _______________________________________________
> es-discuss mailing list
> [email protected] <mailto:[email protected]>
> https://mail.mozilla.org/listinfo/es-discuss 
> <https://mail.mozilla.org/listinfo/es-discuss>
> _______________________________________________
> es-discuss mailing list
> [email protected] <mailto:[email protected]>
> https://mail.mozilla.org/listinfo/es-discuss 
> <https://mail.mozilla.org/listinfo/es-discuss>
> -- 
> Sent from Gmail Mobile
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to