とりあえずメモ。
時間ができたらデモを作る。
デモ
var
WINDOW_APP = WINDOW_APP || {};
WINDOW_APP.util = WINDOW_APP.util || {};
/**
* array utility
*
* @class
*/
WINDOW_APP.util.arrayUtil = (function () {
/**
* 要素数の満たない配列を埋める(はみ出した要素を削る機能はなし)
*
* @param ary {Array} 対象の配列
* @param min {int} 最小要素数
*/
function fill (ary, min) {
var
result = ary.concat(),
num = ary.length; //要素数
for(var i = Math.ceil(min / num); i > 0; i--) {
result = result.concat(ary); //足りない要素分をくっつける
}
return result.slice(0, min);
}
/**
* 配列をシャッフル
*
* @param ary {Array} 対象の配列
* @return {Array} シャッフルされた配列
*/
function shuffle (ary) {
var
result = ary.concat(),
rnd,
buf;
for(var j = ary.length; j > 0; j--) {
rnd = Math.round(Math.random () * j + 0.5) - 1;
buf = result.splice(rnd, 1)[0]; //該当した要素を末尾に移動
result[result.length] = buf;
}
return result;
}
/**
* 要素が重複しない配列を取得
*
* @param data {Array} 整形する配列
* @return {Array} 重複しない配列
*/
function unique(data) {
var
storage = {},
result = [];
for (var i = 0, l = data.length; i < l; i++) {
var value = data[i];
if (!(value in storage)) {
storage[value] = true;
result[result.length] = value;
}
}
return result;
}
//public
return {
fill: fill,
shuffle: shuffle,
unique: unique
}
}());
//TEST
console.log(WINDOW_APP.util.arrayUtil.fill([0,1,2], 10)); //[0, 1, 2, 0, 1, 2, 0, 1, 2, 0]
console.log(WINDOW_APP.util.arrayUtil.shuffle([0,1,2,3,4,5,6,7,8,9,10])); //[6, 8, 2, 4, 1, 9, 5, 3, 7, 10, 0]