Estoy confundido por qué esta función alguna vez devolvería true . Si se agrega un elemento a la stack , devolver !stack.length devolvería false , ¿verdad? Creo que me falta algo sobre cómo funciona la pila, pero parece que no puedo encontrar la respuesta.
var isValid = function (s) { const hash = { '(': ')', '{': '}', '[': ']', }; const stack = []; for (const char of s) { if (char in hash) stack.push(char); else { const top = stack.pop(); if (top === undefined || hash[top] !== char) { return false; } } } return !stack.length; };Eso sucederá cuando la longitud de la pila sea igual a 0. Poner un ! delante de stack.length evaluará NOT 0 . El resultado de esto es true .
Echa un vistazo aquí . O para ser muy específicos:
Si el valor se omite o es 0, -0, nulo, falso, NaN, indefinido o la cadena vacía (""), el objeto tiene un valor inicial de falso