Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как работает код с последовательностью скобок? (https://javascript.ru/forum/misc/76837-kak-rabotaet-kod-s-posledovatelnostyu-skobok.html)

AndriiS 19.02.2019 14:56

Как работает код с последовательностью скобок?
 
Здравствуйте!
Нужна помощь в понимании что происходит в коде, который считает количество скобок в строке. На одном сайте приведен и детально разобран код приведенный ниже. Однако например я не могу понять что это такое за объект?
let opening = { '[': ']', '{': '}', '(': ')', '<': '>', };

Я думаю, что это объект у которого ключи типа 'скобка' и значение типа 'встречная скобка'. Странная и непривычная запись.

(1) Могут быть ключи и значения с такими именами?
(2) Как "работает" запись if(opening[c])? Это эквивалентно if(opening[c]) = true?

Буду благодарен за детальное объяснение как работает этот код. :-)

function correctBrackets(brs){
  let opening = {
    '[': ']',
    '{': '}',
    '(': ')',
    '<': '>',
  };

  let open = 0, close = 0;

  for(let i = 0; i < brs.length; i++){
    let c = brs[i];
    if(opening[c]){
      open++;
    } else {
      close++;
    }
  }

  if(open != close){
    return null;
  }

  // Составляем последовательность
}

Nexus 19.02.2019 15:18

Цитата:

Сообщение от AndriiS
На одном сайте приведен и детально разобран код приведенный ниже.

Цитата:

Сообщение от AndriiS
Буду благодарен за детальное объяснение как работает этот код

Почему не почитать детальный разбор на том сайте, где этот код приведен?

Цитата:

Сообщение от AndriiS
Могут быть ключи и значения с такими именами?

Как видите могут.

Цитата:

Сообщение от AndriiS
Как "работает" запись if(opening[c])? Это эквивалентно if(opening[c]) = true?

В вашем варианте (который "эквивалентен") синтаксическая ошибка.
Из объекта "opening" берется значение, название которого хранится в переменной "с" (если такого свойства нет, то значением будет "undefined") и приводится к булеву типу.


Часовой пояс GMT +3, время: 22:09.