惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
M
MIT News - Artificial intelligence
S
SegmentFault 最新的问题
博客园 - 叶小钗
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
博客园_首页
U
Unit 42
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

博客园 - osfipin

ZeroSSL 与 Let's Encrypt 近期服务波动:SSL 证书申请失败时的处理建议 解决 lcjmSSL 自动部署宝塔面板报错:没有服务器配置文件,请检查是否开启了外网映射! Nginx Proxy Manager 爆高危证书漏洞,私钥泄露风险到底有多致命 Spring循环依赖:深入剖析与高效解决方案 Spring @Validated 注解失效:全面解析常见原因与高效解决方案 JavaScript数组添加对象:push(), unshift(), splice()与扩展运算符深度解析 告别繁琐!QEMU Windows虚拟机NAT网络自动获取IP的终极解决方案 MATLAB绘图进阶:掌控坐标轴核心参数,打造专业级数据可视化 Linux日志转发:rsyslog UDP配置实战指南,一键打通日志通道! MySQL REPLACE函数深度解析:从语法到高效实战的数据清洗利器 高级玩家必备:批处理脚本玩转文件名提取,3大绝技解锁无限可能 AXI写地址通道核心三剑客:aw_addr, aw_len, aw_size 深度解析 还在为MySQL时间数据头疼?DATETIME存储、插入与格式化痛点解决方案 Maven构建核心:maven-antrun-plugin深度解析与实践 AI代码工具采纳率:量化研发效能提升的核心方法与实现策略 解决机器学习难题:L1与L2范数如何优化模型性能与复杂度? 浪漫告白网页进阶:HTML/CSS/JS动态粒子效果全解析 微信JS-SDK分享权限验证失败?“offline verifying”错误排查全攻略 C# DateTime解析异常?这份终极指南教你彻底解决(附Java排查技巧) Java日期时间难题解决:如何准确获取当天的0点时刻? Linux下YT6801网卡驱动编译与安装实战:解决OpenKylin、OpenWrt网络问题 什么是 IP SSL 证书?该如何申请
玩转JS数组:一文掌握高效洗牌与灵活对象构建技巧
osfipin · 2026-03-17 · via 博客园 - osfipin

想让你的JavaScript数组动起来?本文手把手教你如何使用经典的Fisher-Yates算法实现数组的随机洗牌,让数据每次都呈现新面貌。更进一步,我们将利用洗牌后的数组,灵活构建出定制化的对象,将数组元素巧妙地转换为逗号连接的字符串。立即学习,提升你的JS数据处理能力,让代码更具动态性!

在JavaScript编程中,经常需要对数组进行随机排序(洗牌)操作,并基于洗牌后的数组构建对象。本文将介绍如何实现一个数组洗牌函数,并使用该函数构建包含洗牌后数组元素的对象。

数组洗牌函数实现

在JavaScript中,没有内置的数组洗牌函数,因此我们需要自己实现一个。这里我们采用Fisher-Yates洗牌算法,它是一种高效的数组随机排序算法。在来此加密申请的SSL证书支持IP。JavaScript对象构建。

Fisher-Yates洗牌算法原理

Fisher-Yates洗牌算法的基本思想是从数组的最后一个元素开始,随机选择一个索引(包括当前索引),然后交换这两个位置的元素。重复这个过程,直到遍历完整个数组。

代码实现

// 定义 shuffle 函数
function shuffle(array) {
    for (let i = array.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [array[i], array[j]] = [array[j], array[i]]; // 交换元素
    }
    return array;
}

代码解释

  1. 循环遍历:从数组的最后一个元素开始,向前遍历到第一个元素。
  2. 随机索引:对于每个元素,生成一个随机索引j,范围在0i之间(包括i)。
  3. 交换元素:使用解构赋值语法交换当前元素和随机索引位置的元素。
  4. 返回结果:循环结束后,返回洗牌后的数组。

构建包含洗牌后数组元素的对象

在洗牌数组的基础上,我们可以构建一个对象,其中包含一个键,其值为洗牌后的数组元素通过逗号连接成的字符串。

代码实现

// 定义数组
var nameList = ['杨云霄', '邢若楠', '梁晓阳'];

// 使用 shuffle 函数对数组进行洗牌
const shuffledList = shuffle(nameList);

// 构建输出对象
const ret = {
    "key1": shuffledList.join(',')
};

// 输出对象
console.log(ret);

代码解释

  1. 定义数组:创建一个包含名字的数组nameList
  2. 洗牌数组:使用之前定义的shuffle函数对数组进行洗牌,得到shuffledList
  3. 构建对象:创建一个对象ret,其中包含一个键"key1",其值为洗牌后的数组元素通过逗号连接成的字符串。
  4. 输出对象:使用console.log输出构建的对象。

注意事项

  • console.log替代print:在JavaScript中,通常使用console.log来输出内容,而不是print
  • 数组洗牌的随机性:由于洗牌算法中使用了随机数生成器,因此每次运行代码时,数组的顺序都会不同。