排他的バッファー処理?(これはごみ)

検証もしていない。書き綴っただけ。

(function () {
  function ExclusiveBuffer (length) {
    this.buffer = [ ];
    this.max = length - 1;
    this.point = 0;
  }


  var add = function (data) {
    var result;

    for (var i = 0; i < this.point; i++)
      if (this.buffer[i] === data)
        return null;

    this.buffer.push (data);
    
    if (this.point === this.length) {
      return this.buffer.shift ();
    }
    this.point += 1;
  };


  var del = function (data) {
    for (var i = 0; i < this.point; i++)
      if (this.buffer[i] === data) {
        this.buffer.splice (i, 1);
        this.point -= 1;
        return true;
      }

    return false;
  };
  
  
  var init = function (length) {
    if (1 > arguments.length || isNaN (length) || 1 > length)
      return null;
    return new ExclusiveBuffer (length);
  }
  
  ExclusiveBuffer.prototype.del = del;
  ExclusiveBuffer.prototype.add = add;
  
  ExclusiveBuffer.init = init;

  this.ExclusiveBuffer = ExclusiveBuffer;
})();
checkboxの選択数制限と排他処理について
http://oshiete.goo.ne.jp/qa/6470562.html
<!DOCTYPE html>
<title></title>
<body>
<form action="#">
  <p id="hoge" onclick="hogeCheck(event)">
    <input type="checkbox">
    <input type="checkbox">
    <input type="checkbox">
    <input type="checkbox">
    <input type="checkbox">
  </p>
  <p id="huga" onclick="hugaCheck(event)">
    <input type="checkbox">
    <input type="checkbox">
    <input type="checkbox">
    <input type="checkbox">
    <input type="checkbox">
  </p>
</form>


<script type="application/javascript;version=1.8">  

function ExclusiveCheckboxChecker (group, length) {
  var checkboxs = group.querySelectorAll ('input[type="checkbox"]:checked');
  var buffer = [];

  Array.forEach (checkboxs, function (c) {
    (buffer.length < length)
    ? buffer.push (c)
    : c.checked = false
  });

  return function (evt) {
    var checkbox = evt.target;
    var func = (function (b) b !== checkbox);
    
    ('checked' in checkbox)
    ? (checkbox.checked)
      ? (buffer.every (func))
        ? let (d = buffer.push (checkbox))
          (length < buffer.length)
          ? (buffer.shift ()).checked = false
          : null
        : null
      : buffer = buffer.filter (func)
    : null;
  }
}

var hogeCheck = ExclusiveCheckboxChecker (document.querySelector('#hoge'), 2);
var hugaCheck = ExclusiveCheckboxChecker (document.querySelector('#huga'), 3);

</script>