気まぐれな配列 push
データを配列に追加する時に、わざと「漏れ」を生じさせる、ということを考えてみました。
function push_or_not(ary, v) { (Math.random() <= 0.5) && ary.push(v); }
およそ半分の確率で漏れます。
さらに漏れ具合をランダムにしてみましょう:
function push_or_not2(ary) { // カリー化 var x = Math.random(); return function(v) { (Math.random() <= x) && ary.push(v); }; }
大量のデータから適当にピックアップしたい、とか、取得漏れが生じても構わない、といった場合に使えるんじゃないかと思います。
例 1 (with Mochikit):
var ary = []; forEach( large_list, push_or_not2(ary) );
例 2 (ランダムなリンク抽出):
var ary = []; var pon = push_or_not2(ary); responseText.replace(/<a href="(.+?)"/g, function(_, $1) { pon($1); });
追記 [20070322]:
配列からランダムにピックアップする場合は filter 関数を使った方が良いですね (LDR のフィード一覧をこの方法でフィルターしようと考えていて気付きました)。
function true_or_not() { return (Math.random() <= 0.5); } newary = filter(true_or_not, ary); function true_or_not2() { var x = Math.random(); return function() { return (Math.random() <= x); }; } newary = filter(true_or_not2(), ary);