Heim > Fragen und Antworten > Hauptteil
Es gibt ein Array a = [4,19,23,44,56,1], erstellen Sie ein neues Array b, und b wählt zufällig jeweils ein Element aus a aus, bis es erschöpft ist. In JavaScript implementiert
高洛峰2017-05-19 10:33:39
可以用伪随机对a进行洗牌,取任意两个位置的数字进行交换,如此进行n次达到洗牌效果,然后赋值给b。
或者直接按照步骤来,如果不考虑代码效率的话,lodash库提供的数组操作可以使代码更优雅:
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;
});
}
想到个更好的伪随机方法,直接随机排序,代码更简洁,运行效率高:
var src = [4,19,23,44,56,1];
var shuffle = src;
shuffle.sort(function(){
return Math.floor(Math.random() * 3) - 1;
});
仅有的幸福2017-05-19 10:33:39
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);
世界只因有你2017-05-19 10:33:39
实现如下:
var a = [4,19,23,44,56,1];
function randomSort(array){
var newArray = [];
for(let i = 0; i < array.length;){
let j = Math.random() * array.length; // 获取随机的下标值
j = ~~j; // 取整
let item = array.splice(j, 1)[0]; // 从原数组中剔除选中的元素
newArray.push(item);
}
return newArray;
}
randomSort(a);
漂亮男人2017-05-19 10:33:39
我的思路是遍历这个数组,获取这个数组中的随机元素,从a数组中删除同时push进b数组,然后类推下去
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)
滿天的星座2017-05-19 10:33:39
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));
淡淡烟草味2017-05-19 10:33:39
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
//有一个数组a=[4,19,23,44,56,1],新建一个数组b,b从a中一次随机选取一个元素,取完为止。用JavaScript实现
var a = [4,19,23,44,56,1];
var b = [];
function findInArr(num, arr){
for(var i=0; i<arr.length; i++){
if(num == arr[i]){
return true;
}
}
return false;
}
function rnd(m,n){
return m + Math.floor(Math.random()*(n-m));
}
function randomPass(arr){
var len = arr.length;
var rndIndex = rnd(0,len-1);
console.log(rndIndex);
var temp = arr[rndIndex];
if(!findInArr(temp,b)){
b.push(temp);
arr.splice(rndIndex,1);
if(arr.length > 0){
randomPass(arr);
}
}
}
randomPass(a);
console.log(b); // [44, 56, 19, 23, 4, 1] (每次随机)
console.log(a); // []
</script>
</body>
</html>