s = ['[', ']', '{', '}', '(', ')']; copied = s; console.log(copied.length); var output; for (i = 0; i < s.length; i++) { console.log('calling function', i); different(); } function different() { if (copied[0] == '(' && copied[1] == ')') { copied.splice(0, 2); output = 'valid'; console.log('checking', copied); } else if (copied[0] == '{' && copied[1] == '}') { copied.splice(0, 2); output = 'valid'; } else if (copied[0] == '[' && copied[1] == ']') { copied.splice(0, 2); output = 'valid'; console.log('checking', copied); } else { output = 'invalid'; } } console.log(copied); console.log(copied.length); console.log('result is ', output);estoy obteniendo el siguiente resultado
6
función de llamada 0
comprobación [ '{', '}', '(', ')' ]
función de llamada 1
[ '(', ')' ]
2
el resultado es valido
El problema es que el bucle se ejecuta solo dos veces, pero se supone que debe ejecutarse 6 veces.
Se corrigieron algunos problemas con el código. El principal es que la función different() del OP examina la misma parte de la matriz, sin importar el estado del bucle...
const s = ['[', ']', '{', '}', '(', ')', '[', '***'] for (i = 0; i < s.length - 1; i += 2) { let result = different(s[i], s[i + 1]); console.log(result) } function different(a, b) { let match = (a === '(' && b === ')') || (a === '[' && b === ']') || (a === '{' && b === '}') return `"${a}" and "${b}" ${match ? '' : 'do not'} match` }Un enfoque más escalable representaría la sintaxis en los datos, así...
const s = ['[', ']', '{', '}', '(', ')', '[', '***'] const delimiters = { '[': ']', '(': ')', '{': '}', } for (i = 0; i < s.length - 1; i += 2) { let result = different(s[i], s[i + 1]); console.log(result) } function different(a, b) { let match = delimiters[a] === b; return `"${a}" and "${b}" ${match ? '' : 'do not'} match` }