关于 JavaScript for() 循环巫毒

2024-04-30

在相当长的一段时间里,我一直有这样的印象:for循环可能存在solely采用以下格式:

for (INITIALIZER; STOP CONDITION; INC(DEC)REMENTER)
 {
    CODE
 }

然而,这是最绝对事实并非如此;看看这个 JavaScript 实现费舍尔-耶茨洗牌 http://en.wikipedia.org/wiki/Knuth_shuffle:

shuffle = function(o)
 {
    for (var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
 };

这个小片段完全让我大吃一惊;一个简单的 for 循环声明中究竟发生了这么多事情?我的意思是...它甚至没有打开支架!所有的魔法正在完成在那里在 - 的里面for陈述。如果有人能够提供一个相对彻底的解释来解释这个巫术到底是如何做它所做的事情,那就太好了。提前非常感谢。


shuffle = function(o){
     for (
          var j,                // declare j
              x,                // declare x
              i = o.length;     // declare i and set to o.length
          i;                    // loop while i evaluates true
          j = parseInt(Math.random() * i), // j=random number up to i
            x = o[--i],         // decrement i, and look up this index of o
            o[i] =  o[j],       // copy the jth value into the ith position
            o[j] = x            // complete the swap by putting the old o[i] into jth position
          );
     return o;
     };

这是从 i 等于位置数开始,每次交换卡片 i 和 j,其中 j 是每次到 i 的某个随机数,根据算法。

它可以写得更简单,没有令人困惑的逗号集,true。

顺便说一句,这是notJavaScript 中唯一一种 for 循环。还有:

 for(var key in arr) {
      value = arr[key]);
 }

但要小心,因为这也会循环访问对象的属性,包括您传入 Array 对象的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于 JavaScript for() 循环巫毒 的相关文章

  • 带换行符的 React/Momentjs 日期格式

    我有一个日期字符串 我想对其进行格式化 其中数字位于月份下 Jul 6 我尝试了几种不同的方法来添加新行
  • 为什么我的反应路由器链接将我带到页面中间?

    我的网站上有很多链接 但只有一个可以执行此操作 它没有将我带到导航栏的顶部 而是转到内容的中间 知道为什么会这样吗 这是一个页面 其中有一个 map经历一些JSON 这是渲染div页面下方的文本元素 如果重要的话 这是一些可能相关的代码 路
  • axios 请求中未发送正文数据

    我试图通过 axios 请求将数据发送到我的后端脚本 但正文看起来是空的 这是前端发送的请求 axios request method GET url http localhost 4444 next api headers Authori
  • Eslint 从另一个文件确定全局变量

    我试图以这样的方式设置 ESLint 使其在对实际目标文件进行 linting 之前解析全局声明文件 这样我就不必将所有确实是全局的函数和变量声明为全局 而是让解析器弄清楚 In 一些 模块 js function do something
  • jQuery输入文件点击方法和IE上拒绝访问

    我尝试仅使用一个按钮作为输入文件 它在 Firefox Chrome Safari 中工作正常 但在 IE 中不行 提交表单时我总是收到 访问被拒绝 的消息 代码 input file click 有真正的解决方法吗 我在谷歌上浪费了大约2
  • 检测 Google 验证码的挑战窗口何时关闭

    我正在使用谷歌隐形验证码 有没有办法检测挑战窗口何时关闭 我所说的挑战窗口是指您必须选择一些图像进行验证的窗口 目前 我在按钮上放置了一个旋转器 一旦单击按钮 就会呈现验证码挑战 无法向用户提示另一个质询窗口 我以编程方式调用渲染函数 gr
  • JavaScript 将键添加到数组中的每个值

    我下面有这个数组 它由一个简单的数组组成 我想要完成的是放一把钥匙id在每个数组值前面以实现类似的效果 id a id b id c id d 有没有一种简单的方法可以做到这一点 任何帮助将不胜感激 谢谢 var test a b c d
  • 如何在 React Native 上显示 SVG 文件?

    我想显示 svg 文件 我有一堆 svg 图像 但我找不到显示的方式 我尝试使用Image and Use的组成部分反应本机 svg https github com magicismight react native svg但他们不这样做
  • 使用 JQuery 禁用和启用所有超链接

    我有以下禁用所有超链接的内容 但在事件发生后我想再次启用它们 我该如何执行此操作 a click function return false 我认为这不仅仅是将其设置为 true 那么简单 谢谢大家 不要以这种方式绑定 点击 处理程序 而是
  • 当我多次调用 requestAnimationFrame 时会发生什么

    我的意思是一次调用多个具有相同功能的 requestAnimationFrame function Draw DoSomething function AFunc prepare something requestAnimationFram
  • 扩展 RegExp 以获取文件扩展名

    我知道 已经有很多基于 RegExp 的解决方案 但是我找不到适合我需求的解决方案 我有以下函数来获取 URL 的各个部分 但我还需要文件扩展名 var getPathParts function url var m url match w
  • 语法错误:意外的标记“?”在 repl.it 上用 JavaScript 制作不和谐机器人时 [重复]

    这个问题在这里已经有答案了 我收到错误 const token this client token this client accessToken SyntaxError Unexpected token Discord 机器人代码 con
  • Service Worker 与 Shared Worker

    Service Worker 和 Shared Worker 有什么区别 我什么时候应该使用 Service Worker 而不是 Shared Worker 反之亦然 Service Worker 具有共享 Worker 之外的附加功能
  • 我可以使用 ASP.NET WebForms 母版页在每个内容页中包含不同的 javascript/css 文件吗?

    我有几个使用相同母版页的内容页 它们并不都需要包含在相同的 javascript 和 css 文件中 tag 是否可以更改内容来自内容页面的标签 确实如此 但我建议采取一些不同的做法 我在关闭正文标签的正上方放置了一个内容占位符 然后我填充
  • ChartJs:如何按时间值(而不是像素)以编程方式平移

    我使用的是chartJs 3 6 1 和 Chartjs plugin zoom 1 2 1 但我认为这并不重要 我有 2 个时间序列折线图 当我通过拖放平移一个图表时 我也想移动 平移另一个图表 为此 我为 graphA 启用了缩放 平移
  • 为什么 Node.js 应用程序只能从 127.0.0.1/localhost 访问?

    我本来打算教我的朋友介绍 Node 但是后来 我想知道为什么这个代码来自nodejs org var http require http http createServer function req res res writeHead 20
  • d3.event.translate 在触摸设备的缩放上包含 NaN

    我使用 d3 为我的 svg 编写了一个自定义缩放函数 如下所示 Zoom behavior function myzoom xpos d3 event translate 0 ypos d3 event translate 1 vis a
  • ng-include 和 ng-view 不同时加载

    下面是我的应用程序的结构 很简单 页眉和页脚是非常小的文件 而主页上的 ng view 要大得多 当我进入该页面时 我注意到了这一点 首先加载两个 ng include 然后 ng view 出现 页脚被推到底部 页脚闪烁大约 0 1 秒
  • 确定 Javascript 中的日期相等性

    我需要找出用户在 Javascript 中选择的两个日期是否相同 日期以字符串 xx xx xxxx 形式传递给该函数 这就是我需要的全部粒度 这是我的代码 var valid true var d1 new Date datein val
  • 如何映射轮播的子项数组?

    我正在尝试将 Carousel 组件包装在映射对象数组周围作为组件的子级 目前我只能让映射创建映射对象的 1 个子对象 轮播需要像这样

随机推荐

  • C++ 带符号和无符号之间隐式转换的代码安全性

    根据有符号整数类型和无符号整数类型之间隐式转换的规则 讨论here https stackoverflow com questions 17832815 c implicit conversion signed unsigned and h
  • 使用 VS Code 进行 Flutter,无法找到 Android Studio 可执行文件

    我重新安装了 Flutter 和 Android Studio 我已经安装了 Java 和 SDK 库 并且可以从 VS Code 运行该应用程序 但是当我尝试在 Android Studio 中打开 Android 模块时 我得到 无法找
  • 如何获取以太坊账户余额?

    如何以编程方式发现以太坊区块链上给定账户中有多少 ETH 在网上 不是程序化的 而是为了完整性 如果您只想获取帐户或合约的余额 您可以访问http etherchain org http etherchain org or http eth
  • 使用 groovy 向 jenkins 作业添加附加参数

    我们有一组 groovy 脚本 用户可以在他们的 jenkins 文件中调用它们来设置一些常见的作业属性 但是 我们无法弄清楚在进行此更新时如何保留其现有参数 我们的常规代码片段 def newParamsList def newbool
  • ios 如何验证输入的电话号码是否确实是用户的电话号码?

    我见过一些不同的应用程序 Snapchat whatsapp 等 要求用户输入电话号码 然后 系统会向用户发送一条带有代码的短信 以验证该号码是否确实是他们的号码 然后他们就可以看到哪些用户的地址簿联系人也拥有该应用程序 我了解所有这些是如
  • DateTime 以毫秒为单位的表示形式?

    我有一个 SQL 服务器时间戳 需要将其转换为自 1970 年以来以毫秒为单位的时间表示形式 我可以使用纯 SQL 来执行此操作吗 如果没有 我已将其提取到DateTimeC 中的变量 是否有可能得到这个的毫秒表示 Thanks Teja
  • 如何在 Switch/SwitchCompat 按钮中设置宽度和轨道文本并实现此结果? (附有图片和 GIF)

    我需要在我的应用程序中实现一个像这样的按钮 我使用了 SwitchCompat 按钮 但我最接近的是这一点 有两个主要问题 1 当屏幕尺寸发生变化时 按钮的宽度无法正确调整 可绘制对象被切断 变得太小等 宽度正确占据父视图 包围它的小型线性
  • C# 中是否存在异步正则表达式?它们对我的情况有帮助吗?

    我的应用程序使用正则表达式并行搜索许多文件 await Task WhenAll filePaths Select FindThings 代替FindThings 它花费大部分时间执行正则表达式搜索 因为这些文件的大小可能有数百MB sta
  • 如何从 Dart 中的 Uint8List 读取 16 位 int?

    我有一个二进制数据存储在 Uint8List 中 我想从该列表中读取一个 16 位 int 有什么方便的方法可以帮助解决这个问题吗 摘自我和同事的对话 您可以使用 ByteData 类 var buffer new Uint8List 8
  • 如何从类中排除某些字符?

    假设我想匹配一个 单词 字符 w 但排除 或匹配空白字符 s 但排除 t 我怎样才能做到这一点 使用包含 W 或 S 的否定类 W anything that s not a non word character and not S t a
  • 我需要在 header("Location: http://localhost/..."); 之后使用 exit 吗?

    我正在创建一个脚本来验证表单 并且我问自己一个问题 当我使用标头 参见下面的示例 时 我需要立即使用 exit 吗 我的意思是 使用 header 是否也意味着它默认退出 因此我不需要使用命令 exit cancel button clic
  • Vagrant 的端口转发不起作用[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我在最后遇到了一个小问题入门指南vagrant http vagrantup com docs getting started ports html
  • 可滚动 Turbo 表中的 PrimeNG 过滤器下拉问题

    在 prime ng Turbo Table 中 当我们将过滤器下拉列表放入表内的可滚动表下拉列表中时 没有可滚动表下拉菜单就完美了 这工作完美 https i stack imgur com 16vjy png 但是当可滚动表格时 下拉菜
  • gdi+ 中的半色调效果

    我该如何去模仿this http www juicybitssoftware com halftone GDI 中的半色调效果 它几乎看起来像弗洛伊德 斯坦伯格 http en wikipedia org wiki Floyd E2 80
  • Android TextView 更改文本大小后不调整大小

    我有一个ListView对该行进行一些自定义布局 一张图像 然后使用两个TextView在垂直方向上LinearLayout 参见下面的代码 我的问题是 当我动态更改文本大小时 在getView的方法Adapter 文字大小确实改变了 但是
  • Java中StringBuilder如何逆向工作?

    我正在尝试解决这个leetcode问题https leetcode com problems palindrome linked list https leetcode com problems palindrome linked list
  • java-websocket的WebSocketServer使用什么草案?

    我无法从WebSocketServer java源码 https github com TooTallNate Java WebSocket blob master src main java org java websocket serv
  • 生成实体密钥

    我第一次对 Entity Framework 4 感到失望 事实证明 当 SQL CE 与 EF4 一起使用时 不支持自动生成主键 http social msdn microsoft com forums en US sqlce thre
  • 二分图中最小顶点覆盖算法

    我正在尝试找出一种算法来查找二分图的最小顶点覆盖 我正在考虑一个解决方案 将问题减少到二分图中的最大匹配 众所周知 可以使用从 bip 创建的网络中的最大流量来找到它 图形 最大匹配 M 应确定最小匹配 顶点覆盖 C 但我无法处理选择顶点来
  • 关于 JavaScript for() 循环巫毒

    在相当长的一段时间里 我一直有这样的印象 for循环可能存在solely采用以下格式 for INITIALIZER STOP CONDITION INC DEC REMENTER CODE 然而 这是最绝对事实并非如此 看看这个 Java