Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

open brackets must be closed in the correct order in javascript

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

i am getting the following output

6

calling function 0

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

checking [ ‘{‘, ‘}’, ‘(‘, ‘)’ ]

calling function 1

[ ‘(‘, ‘)’ ]

2

result is valid

The problem is for loop runs only twice but it is supposed to run 6 times.

>Solution :

Fixed a few issues with the code. The primary one being that the OP’s different() function examines the same part of the array, no matter the state of the loop…

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`
}

A more scalable approach would put represent the syntax in data, like this…

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`
}
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading