JSFiddle - React, Tailwind, and code Playground

JavaScript

var brackets = ["()", "[]", "{}"];

function isOpening(b) {
  function first(str) {
    return str[0];
  }
  var openingBrackets = brackets.map(first);
  return openingBrackets.indexOf(b) !== -1;
}

function isClosing(b) {
  function second(str) {
    return str[1];
  }
  var closingBrackets = brackets.map(second);
  return closingBrackets.indexOf(b) !== -1;
}

function bracketsMatch(b1, b2) {
  return brackets.indexOf(b1 + b2) !== -1;
}

function isBalanced(str) {
  var stack = [];
  for (var i = 0; i < str.length; ++i) {
    var current = str[i];
    if (isOpening(current)) {
      stack.push(current);
    } else if (isClosing(current)) {
      var top = stack.pop();
      if (typeof(top) === "undefined" || !bracketsMatch(top, current)) {
        return false; // bad match or too many closing brackets
      }
    }
  }
  return stack.length === 0; // not too many opening brackets
}

console.log(isBalanced("")); // true
console.log(isBalanced("()()")); // true
console.log(isBalanced("{{[]()}}")); // true
console.log(isBalanced("([)]")); // false
console.log(isBalanced("]]")); // false