Implementé una clase que se puede usar para instanciar objetos pasados a una función de visitante que detecta claves duplicadas en un documento JSON. El problema que estoy tratando de resolver es detectar claves duplicadas que están en un documento JSON. Más específicamente, quiero detectar duplicados en el mismo nivel de anidamiento, al que me referiré como contexto de ahora en adelante.
La clase que implementé tiene 2 campos:
stack
: una matriz que almacena todas las claves visitadas agrupadas por contexto (cada elemento de la matriz contiene claves para un contexto dado)visited
: que contiene las claves visitadas para el contexto actual (parte superior de la pila)Mi pregunta es la siguiente:
¿Debo borrar el Set
de las referencias que podrían contener a las teclas cuando las saque de la pila? En otras palabras, ¿es necesaria la llamada discarded?.clear()
ya que el conjunto contiene referencias de cadena a las claves visitadas?
Entiendo que la referencia del conjunto en sí se perderá, pero me pregunto acerca de las referencias que contiene el conjunto (a las claves visitadas en el documento json)
class DetectDuplicates { stack; visited; constructor() { this.stack = []; this.visited = new Set(); } onObjectBegin() { this.stack.push(new Set()); this.visitedKeys = this.stack[this.stack.length - 1]; } onObjectEnd() { const discarded = this.stack.pop(); // Is that necessary? discarded?.clear(); this.visitedKeys = this.stack[this.stack.length - 1]; } }
¿Debo borrar el
Set
de las referencias que podrían contener a las teclas cuando las saque de la pila?
No. Si no se hace referencia a la instancia de Set
desde ningún otro lugar, se recolectará basura y se llevará consigo todas las referencias almacenadas en él.