JavaScript 数组

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