JavaScript 数组
JavaScript 数组类用于构造数组,数组是高级和类似列表的对象。
数组可用于在单个变量中存储多个值。
数组可以被描述为能够同时保存多个值的唯一变量。
每个项目都有一个编号,称为数字索引,允许我们访问它。
JavaScript 数组从零索引开始,并使用不同的方法进行操作。
与 Ruby 和 PHP 等语言相反,JavaScript 没有内置的打乱数组的方法。
但是,有一种方法可以对序列进行打乱。
例如,我们有以下数组:
let arr = [1, 2, 3, 4, 5] => [3, 5, 4, 1, 2] //打乱后可能是这样的。
打乱一组值被认为是计算机科学中最古老的问题之一。
使用 Fisher-Yates shuffle 算法可以进行混洗,以生成有限序列的随机排列。
也就是说,算法对序列进行了shuffle。
Richard Durstenfeld 介绍了专为计算机使用而设计的现代版 Fisher-Yates shuffle。
function shuffleArray(array) {
let curId = array.length;
//There remain elements to shuffle
while (0 !== curId) {
//Pick a remaining element
let randId = Math.floor(Math.random() * curId);
curId -= 1;
//Swap it with the current element.
let tmp = array[curId];
array[curId] = array[randId];
array[randId] = tmp;
}
return array;
}
//Usage of shuffle
let arr = [1, 2, 3, 4, 5];
arr = shuffleArray(arr);
console.log(arr);
如果使用 ES6/ECMAScript 2014 编码,允许立即分配两个变量,代码将更短:
function shuffleArray(arr) {
for (let i = arr.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[arr[i], arr[j]] = [arr[j], arr[i]];
}
console.log(arr);
}
let arr = [1, 2, 3, 4, 5];
shuffleArray(arr);
function shuffleArray(arr) {
arr.sort(() => Math.random() - 0.5);
}
let arr = [1, 2, 3, 4, 5];
shuffleArray(arr);
console.log(arr)
日期:2020-06-02 22:16:23 来源:oir作者:oir
