一意の値のみを含むarr1のコピーである一時配列を作成します。
// Copy unique values in arr1 into temp_arr
var temp_obj = {}, temp_arr = [], i;
for(i = arr1.length; i--;)
temp_obj[arr1[i]] = 1;
for(i in temp_obj)
temp_arr.push(i);
temp_arr
その後、要素をに追加するたびに要素を削除できますarr2
。コピー時にオブジェクトキーを使用したので、文字列があります。これを使用+
して、にプッシュするときにそれらを数値に戻すことができarr2
ます。
arr2.push(+temp_arr.splice(rand, 1)[0]);
また、乱数の選択方法を次のように変更する必要があります。
var rand = Math.floor(Math.random()*temp_arr.length);
コード全体:
var limit = 5,
arr1 = [12, 14, 67, 45, 8, 45, 56, 8, 33, 89],
arr2 = [],
rand,
temp_obj = {},
temp_arr = []
i;
// Copy unique values from arr1 into temp_arr
for(i = arr1.length; i--;)
temp_obj[arr1[i]] = 1;
for(i in temp_obj)
temp_arr.push(i);;
// Move elements one at a time from temp_arr to arr2 until limit is reached
for (var i = limit; i--;){
rand = Math.floor(Math.random()*temp_arr.length);
arr2.push(+temp_arr.splice(rand, 1)[0]);
}
console.log(arr2);