Разъясните на пальцах как работает эта строка

129
15 ноября 2020, 23:50

Задача: написать функцию, которая принимает строку скобок, и определить, является ли порядок скобок действительным. ['(',')'] - это действительный порядок скобок, ['(','('] - а это не действительный порядок, так как нет закрывающейся скобки. Функция должна возвращать true, если строка верна, и false, если она неверна.

Решение внизу правильное, однако я не могу понять как работает эта строчка if (close.indexOf(str[i]) === open.indexOf(stack[stack.length - 1])) что возвращает выражение слева и что вернет выражение справа и как это на пальцах работает ?

function validParentheses(str){
    const stack = [], open = ['(', '{', '['], close = [')', '}', ']'];
    for (var i = 0; i < str.length; i++) {
        if (open.includes(str[i])) {
            stack.push(str[i]);
        } else {
            if (close.indexOf(str[i]) === open.indexOf(stack[stack.length - 1])) {
                stack.pop();
            } else {
                return false;
            }
        }
    }   
    return stack.length === 0;
}
var a = ['(',')'];
console.log(validParentheses(a));