ジント兄さんのテストブログ

ジント兄さんがFC2ブログのカスタマイズを練習するために作ったブログです。

カテゴリ別のリンクを探している方、どんな記事があるかをもれなく把握したい方は、記事一覧のページをご覧になってください。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Array.prototype.combination(オレオレメソッド)

Object.definePropertyの使い方を覚えたので、JavaScriptの配列から2個の要素を重複しないで取り出すパターンの集合を配列で返すようなものを書いてみた。

if (!Array.prototype.combination) {
  Object.defineProperty(Array.prototype, 'combination', {
    configurable: false,
    enumerable: false,
    writable: false,
    value: function() {
      var result = [], shifted;
      while(this[0]) {
        shifted = this.shift();
        this.forEach(function(e) {
          result.push([shifted, e]);
        });
      }
      return result;
    }
  });
}
[1, 2, 3, 4].combination();//[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]

2個の要素を選ぶだけじゃなくて、3個選ぶ場合とかも引数で指定できるようにすればもっと便利と思われる。

追記(2014年2月23日)

上のコードだと元の配列が空っぽになるので、Array#sliceとかで元の配列をコピーしたやつを処理するようにした方がいい。

コメント

0: ジント兄さん
メッセージをどうぞ。

トラックバック

この記事のトラックバックURL:http://jislotz.blog.fc2.com/tb.php/9-19e0821f

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。