javascript - Un tableau prend des éléments aléatoires d'un autre tableau
PHP中文网2017-05-19 10:31:39
0
7
744
Il existe un tableau a=[4,19,23,44,56,1], créez un nouveau tableau b et b sélectionne au hasard un élément à la fois dans a jusqu'à ce qu'il soit épuisé. Implémenté en JavaScript
Vous pouvez mélanger a de manière pseudo-aléatoire, échanger les nombres dans deux positions quelconques, le faire n fois pour obtenir l'effet de mélange, puis l'attribuer à b.
Ou suivez simplement les étapes. Si l'efficacité du code n'est pas prise en compte, les opérations sur les tableaux fournies par la bibliothèque lodash peuvent rendre le code plus élégant :
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;
});
}
J'ai pensé à une meilleure méthode pseudoaléatoire, qui est directement triée de manière aléatoire, le code est plus simple et l'efficacité de fonctionnement est élevée :
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);
Mon idée est de parcourir ce tableau, d'obtenir des éléments aléatoires dans ce tableau, de les supprimer du tableau a et de les pousser dans le tableau b, et ainsi de suite
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));
Je ne l'écrirai pas au quatrième étage. J'en sélectionne simplement un au hasard dans le tableau, un à la fois. Après la randomisation, continuez la randomisation. ça va
Vous pouvez mélanger a de manière pseudo-aléatoire, échanger les nombres dans deux positions quelconques, le faire n fois pour obtenir l'effet de mélange, puis l'attribuer à b.
Ou suivez simplement les étapes. Si l'efficacité du code n'est pas prise en compte, les opérations sur les tableaux fournies par la bibliothèque lodash peuvent rendre le code plus élégant :
J'ai pensé à une meilleure
méthode pseudoaléatoire, qui est directement triée de manière aléatoire, le code est plus simple et l'efficacité de fonctionnement est élevée :La mise en œuvre est la suivante :
Mon idée est de parcourir ce tableau, d'obtenir des éléments aléatoires dans ce tableau, de les supprimer du tableau a et de les pousser dans le tableau b, et ainsi de suite
Je ne l'écrirai pas au quatrième étage. J'en sélectionne simplement un au hasard dans le tableau, un à la fois. Après la randomisation, continuez la randomisation. ça va