[JavaScript] 使用 Fisher-Yates 随机算法,随机化数组

简介: 要使用 JavaScript 随机化数组的顺序,可以使用 Fisher-Yates 随机算法(也称为 Knuth 洗牌算法)。这个算法通过遍历数组,将当前元素与随机位置的元素交换来实现随机化。

要使用 JavaScript 随机化数组的顺序,可以使用 Fisher-Yates 随机算法(也称为 Knuth 洗牌算法)。这个算法通过遍历数组,将当前元素与随机位置的元素交换来实现随机化。

下面是一个使用 Fisher-Yates 算法随机化数组的示例:

function shuffleArray(array) {
   
  for (let i = array.length - 1; i > 0; i--) {
   
    // 生成一个 0 到 i 之间的随机索引
    const j = Math.floor(Math.random() * (i + 1));

    // 交换当前元素与随机位置的元素
    [array[i], array[j]] = [array[j], array[i]];
  }

  return array;
}

// 示例用法
const myArray = [1, 2, 3, 4, 5];
const shuffledArray = shuffleArray(myArray);
console.log(shuffledArray);

在这个示例中,我们定义了一个 shuffleArray 函数,接受一个数组作为参数。然后,我们使用循环来遍历数组,从最后一个元素开始,生成一个随机索引(介于 0 到当前索引之间)。然后,我们交换当前元素和随机索引处的元素,进行随机化。

最后,我们调用 shuffleArray 函数,并将数组作为参数传入。它会返回一个随机化顺序的数组。我们使用 console.log 打印出结果以进行验证。

请注意,shuffleArray 函数会直接在原始数组上进行修改,并返回随机化后的数组。如果你不想修改原始数组,可以在函数内部创建一个副本进行操作。

相关文章
|
6天前
|
JavaScript 索引
Vue.js的`v-for`用于基于数组或对象渲染列表,如遍历数组生成`<li>`元素
【6月更文挑战第25天】Vue.js的`v-for`用于基于数组或对象渲染列表,如遍历数组生成`<li>`元素。基本语法是`v-for="(item, index) in items"`,支持遍历对象的键值对。注意与`v-if`同用时应使用`<template>`,组件上使用`v-for`需设`key`属性以优化性能。
15 2
|
4天前
|
JavaScript 前端开发
技术经验分享:javaScript遍历对象、数组总结
技术经验分享:javaScript遍历对象、数组总结
技术经验分享:javaScript遍历对象、数组总结
|
5天前
|
存储 算法 调度
【数据结构与算法】详解循环队列:基于数组实现高效存储与访问
【数据结构与算法】详解循环队列:基于数组实现高效存储与访问
|
6天前
|
JavaScript 索引
JS判断数组是否包含某个元素
JS判断数组是否包含某个元素
11 1
|
7天前
|
JavaScript 前端开发 搜索推荐
JavaScript常见的排序算法详解
JavaScript常见的排序算法详解
11 1
|
9天前
|
存储 JavaScript 前端开发
JavaScript中的数组是核心数据结构,用于存储和操作序列数据
【6月更文挑战第22天】JavaScript中的数组是核心数据结构,用于存储和操作序列数据。创建数组可以使用字面量`[]`或`new Array()`。访问元素通过索引,如`myArray[0]`,修改同样如此。常见方法包括:`push()`添加元素至末尾,`pop()`移除末尾元素,`shift()`移除首元素,`unshift()`添加到开头,`join()`连接为字符串,`slice()`提取子数组,`splice()`进行删除、替换,`indexOf()`查找元素位置,`sort()`排序数组。还有其他如`reverse()`、`concat()`等方法。
30 2
|
10天前
|
JavaScript 前端开发
记录Javascript数组类练习
记录Javascript数组类练习
11 1
|
4天前
|
算法 JavaScript 安全
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
|
5天前
|
算法 JavaScript 安全
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密