javascript - Satu tatasusunan mengambil elemen rawak daripada tatasusunan lain
PHP中文网2017-05-19 10:31:39
0
7
696
Terdapat tatasusunan a=[4,19,23,44,56,1], cipta tatasusunan baharu b dan b secara rawak memilih satu elemen pada satu masa daripada a sehingga ia habis. Dilaksanakan dalam JavaScript
Anda boleh mengocok a dengan pseudo-rawak, menukar nombor dalam mana-mana dua kedudukan, lakukan ini sebanyak n kali untuk mencapai kesan kocok, dan kemudian tetapkannya kepada b.
Atau hanya ikut langkah Jika kecekapan kod tidak dipertimbangkan, operasi tatasusunan yang disediakan oleh perpustakaan lodash boleh menjadikan kod lebih elegan:
var src = [4,19,23,44,56,1];
var shuffle = [];
while(src.length > 0){
var random_index = Math.floor(Math.random() * src.length);
shuffle.push(src[random_index]);
src = src.filter(function(el, i){
return i != random_index;
});
}
Saya memikirkan pseudokaedah rawak yang lebih baik, yang diisih terus secara rawak, kodnya lebih ringkas dan kecekapan operasinya tinggi:
var src = [4,19,23,44,56,1];
var shuffle = src;
shuffle.sort(function(){
return Math.floor(Math.random() * 3) - 1;
});
var a=[4,19,23,44,56,1];
var b=[];
var c=[0,0,0,0,0,0];
var aLen = a.length;
while (c.indexOf(0)!=-1){
var randomNum = Math.floor(Math.random()*aLen);
if (c[randomNum] == 0){
b.push(a[randomNum]);
c[randomNum]=1
}
}
console.log(b);
Idea saya adalah untuk merentasi tatasusunan ini, dapatkan elemen rawak dalam tatasusunan ini, padamkannya daripada tatasusunan a dan tolaknya ke dalam tatasusunan b, dan seterusnya
var a = [4,19,23,44,56,1],
aLen = a.length,
b = [];
// 定义删除数组中指定元素的方法
Array.prototype.removeByValue = function(val) {
for(var i=0; i<this.length; i++) {
if(this[i] == val) {
this.splice(i, 1);
break;
}
}
}
// 遍历a数组
for(var i=0; i<aLen; i++){
var cur = a[Math.floor(Math.random()*a.length)]; //获取随机的元素
a.removeByValue(cur); // 从a中删除
b.push(cur); // 添加进b
}
console.log(b)
var a=[4,19,23,44,56,1];
function randomSelect(str){
var leng= a.length;
var b=[];
while(leng!=0){
b.push(a.splice(Math.random()*leng,1).join())
leng--;
}
return b;
}
console.log(randomSelect(a));
Saya tidak akan menulisnya ke tingkat empat, saya hanya memilih satu daripada tatasusunan secara rawak selepas rawak, keluarkannya dari tatasusunan Hanya tolak yang dikeluarkan ke dalam tatasusunan oklah
Anda boleh mengocok a dengan pseudo-rawak, menukar nombor dalam mana-mana dua kedudukan, lakukan ini sebanyak n kali untuk mencapai kesan kocok, dan kemudian tetapkannya kepada b.
Atau hanya ikut langkah Jika kecekapan kod tidak dipertimbangkan, operasi tatasusunan yang disediakan oleh perpustakaan lodash boleh menjadikan kod lebih elegan:
Saya memikirkan
pseudokaedah rawak yang lebih baik, yang diisih terus secara rawak, kodnya lebih ringkas dan kecekapan operasinya tinggi:Pelaksanaannya adalah seperti berikut:
Idea saya adalah untuk merentasi tatasusunan ini, dapatkan elemen rawak dalam tatasusunan ini, padamkannya daripada tatasusunan a dan tolaknya ke dalam tatasusunan b, dan seterusnya
Saya tidak akan menulisnya ke tingkat empat, saya hanya memilih satu daripada tatasusunan secara rawak selepas rawak, keluarkannya dari tatasusunan Hanya tolak yang dikeluarkan ke dalam tatasusunan oklah