投稿者 tel | 2014年1月13日

値をランダムに取り出す

0から10までの値をランダムな順番で取り出すようなのを考える。

var a = [];
for(var i = 0; i < 11; i++) {
    a.push(i);
}

for(var j = 0, n = a.length; j < n; j++) {
    console.log(a.splice(Math.random() * a.length ^ 0, 1)[0]);
}

配列に0から10までの値を入れておいてランダムに取り出す。

これだとメモリに優しくなさそうなので配列のサイズを変えないでこうしたほうがいいかも。

var a = [];
for(var i = 0; i < 11; i++) {
    a.push(i);
}

for(var n = a.length; n > 0; n--) {
    var k = Math.random() * n ^ 0,
        t = a[k];
    a[k] = a[n - 1];
    console.log(t);
}

ついでで、配列から値をランダムにforEachする。

Array.prototype.randomForEach = function(fn) {
    var a = [];
        n = this.length;
    
    for(var i = 0; i < n; i++) {
        a.push(i);
    }
    
    for(; n > 0; n--) {
        var k = Math.random() * n ^ 0;
        fn(this[a[k]], a[k]);
        a[k] = a[n - 1];
    }
};

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。