isBalanced

JavaScript

function isBalanced(str) {
  var openings = ["{"];
  var closings = ["}"];
  var opened = 0;

  str.split("").forEach(function(char) {
    if (opened < 0) {
      return;
    }
    if (~openings.indexOf(char)) {
      opened = opened + 1
    } else if (~closings.indexOf(char)) {
      opened = opened - 1
    }
  });
  return opened == 0;
}

console.assert(isBalanced('foo { bar } }') == false)
console.assert(isBalanced('foo { bar { baz }') == false)
console.assert(isBalanced('foo { bar { baz } boo }') == true, "is balanced")
console.assert(isBalanced('{}{}') == true)
console.assert(isBalanced('{{}') == false)
console.assert(isBalanced('}{') == false)
console.assert(isBalanced('{[()]}') == true)
console.assert(isBalanced('{[{}][()]}') == true)