配列シャッフル 3

配列シャッフル。オリジナルを破壊せず、破壊/非破壊はユーザーの代入先に委ねるパターン。 オリジナルの非破壊的コピーから破壊的に要素を切り出して新規配列に追加。これまでのよりずいぶん軽そう。 多次元配列内の内部はシャッフルされない。

JavaScript

var myArray = [
    "a", "b", "c", "d", "e", "f", "g", "h", "i",
    "j", "k", "l", "m", "n", "o", "p", "q", "r",
    "s", "t", "u", "v", "w", "x", "y", "z", "(・∀・)"
];

var shuffle = function(a) {
    var c = a.slice(0),
        r = [],
        i = 0,
        aLen = a.length;
    for ( ; i < aLen; i++) {
        r.push(c.splice(Math.floor(Math.random() * c.length), 1));
    }
    return r;
};

//test
var Shuffled = shuffle(myArray);
document.write("混ぜたの : " + Shuffled +"<br />");
document.write("元の配列 : " + myArray);