JS-编写函数random(arr),返回将arr数组项随机打乱后的新数组。
时间: 2023-05-27 21:02:10 浏览: 49
function random(arr) {
let newArr = arr.slice(); // 复制数组,避免直接改变原数组
for (let i = newArr.length - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1)); // 随机生成下标
// 交换当前项和随机项
let temp = newArr[i];
newArr[i] = newArr[j];
newArr[j] = temp;
}
return newArr;
}
相关问题
编写函数random(arr),返回将arr数组项随机打乱后的新数组。js
function random(arr) {
let result = [...arr]; //复制一份原数组
for (let i = result.length - 1; i >= 0; i--) { //从最后一项开始循环
const randomIndex = Math.floor(Math.random() * (i + 1)); //生成一个0到i之间的随机数
[result[i], result[randomIndex]] = [result[randomIndex], result[i]]; //交换当前项和随机项的位置
}
return result;
}
如何将数组随机打乱顺序?
在 JavaScript 中,可以使用 Fisher-Yates 洗牌算法(也称为 Knuth 洗牌算法)将一个数组随机打乱顺序。该算法的基本思路是从数组末尾开始,依次将当前位置的元素与前面随机位置的元素互换,直到整个数组都被遍历一遍。这样可以保证每个元素都有相同的概率出现在每个位置上。以下是一个示例实现:
```javascript
function shuffle(array) {
var currentIndex = array.length;
var temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
```
这个函数会接收一个数组作为参数,然后返回一个随机打乱顺序后的新数组。该函数使用了 while 循环和 Math.random() 函数,每次循环都会将当前位置的元素与前面随机位置的元素互换,直到整个数组都被遍历一遍。最后返回打乱顺序后的新数组。
示例用法:
```javascript
var arr = [1, 2, 3, 4, 5];
var shuffledArr = shuffle(arr);
console.log(shuffledArr); // [3, 5, 4, 1, 2] 或者其他任意顺序的数组
```