phantom4

[js] 配列の要素埋めとシャッフル

とりあえずメモ。
時間ができたらデモを作る。

デモ

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]

ソース:

array_util.js
array_util.min.js(圧縮版)

モバイルバージョンを終了