var arr = [1, 2, 3, 4];
finalarr = [];
for (i = 0; i <= 5; i++) {
arr.sort(function(a, b) {
return 0.5 - Math.random();
});
finalarr.push(arr);
}
/*once it randomizes that first array, it keeps repeating it. i dont want
that i want it to reshuffle the array everytime i run that loop*/
console.log(finalarr);
它仅随机化数组一次并不断重复
最佳答案
编辑
第二个演示是演示 1 修改为接受两个参数:
@Params: array [Array]...: The array to shuffle
repeat [Number]..: The number of new randomized arrays to be returned
@Return: An array of arrays (aka "two-dimensional array")
正如Nick Parsons所述,您使用的是对数组的引用,加上您的结果是一个完整数组,您在其中添加到一个空数组(例如
[[4, 3, 2, 1]]
) return 将只是一个与原始数组具有相同元素但顺序随机的数组 ([2, 4, 1, 3]
)。
以下演示:
使用最有效的方式来打乱数组:Fisher–Yates algorithm .
接受标准数组并通过 spread operator 克隆它
[...数组]
shuffle()
函数被单独调用三次,并返回一个具有随机顺序的新数组。
注意:有一个可选的实用程序功能,可以更好地显示控制台日志。这不是一个要求。
演示 1
let array = [1, 2, 3, 'A', 'B', 'C'];
const shuffle = ([...array]) => {
let i = 0;
let j = 0;
let temp = null;
for (i = array.length - 1; i > 0; i -= 1) {
j = Math.floor(Math.random() * (i + 1));
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
const log = data => console.log(JSON.stringify(data));
log(shuffle(array));
log(shuffle(array));
log(shuffle(array));
演示 2
let array = [1, 2, 3, 'A', 'B', 'C'];
const shuffle = (array, repeat = 1) => {
let result = [];
for (let r = repeat; r > 0; r -= 1) {
let clone = [...array];
for (let i = clone.length - 1; i > 0; i -= 1) {
let s = Math.floor(Math.random() * (i + 1));
let temp = clone[i];
clone[i] = clone[s];
clone[s] = temp;
}
result.push(clone);
}
return result;
}
const log = data => console.log(JSON.stringify(data));
log(shuffle(array));
log(shuffle(array, 5));
// .flat() is invoked on the return array to provide a single array
log(shuffle(array, 5).flat());
关于javascript - 有没有办法随机打乱数组,以便数组每次都可以不同地出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59573756/