【问题标题】:Javascript fisher-yates assistanceJavascript Fisher-yates 帮助
【发布时间】:2018-12-08 23:20:13
【问题描述】:

我通常是编码新手,并且已经使用 javascript 一段时间了 - 对于我在发布此问题时可能犯的任何错误,请提前道歉。我研究了 2 个小时的大部分时间,但无法自己想出答案,所以我在这里注册了一个帐户。

我遇到了this 答案/代码,并且正在努力理解代码的某些方面。我让它在我的代码中工作,但我想围绕我不太了解的特定方面展开我的头脑。

具体来说,我不明白 1) 变量在分配 3 个定义时如何工作,每个定义后跟一个逗号 - 变量指的是哪个?一旦脚本末尾定义了所有分配,它如何知道接下来要使用哪个?

2) 我需要澄清一下“开关”部分及其工作原理。如何根据上一个依次定义每个,鼓励代码切换?

非常感谢您。

【问题讨论】:

    标签: javascript arrays random


    【解决方案1】:

    这只是声明了三个变量名,但只分配了currentIndextemporaryValuerandomIndex 此时未定义,稍后会用到:

    var currentIndex = array.length, temporaryValue, randomIndex;
    

    这与:

    var currentIndex = array.length;
    var temporaryValue;
    var randomIndex;
    

    交换变量的困难之一(在 JS 有很好的解包/解构之前)是你不能一步完成。

    例如,如果您有:

    let a = "foo";
    let b = "bar";
    

    并且您想交换它们。一旦你说a = b,你就不再知道a之前的值是什么,因为你只是重写了它。解决方法是使用临时变量来保存旧的a

    let a = "foo";
    let b = "bar";
    
    // swap
    let temp = a // remember old a value
    a = b        // replace a
    b = temp     // replace b with the original a
    

    这些天你可以简单地使用:

    let a = "foo";
    let b = "bar";
    
    [a, b] = [b, a]; //Swap in one step
    
    console.log(a, b) 

    【讨论】:

    • 非常感谢,马克 - 这真的很有帮助!
    • 为多个 cmets 道歉,不小心按了 Enter - 这是整个评论:非常感谢,Mark - 这真的很有帮助!因此,为了澄清, currentIndex 仅由最左边的名称 array.length 定义 - 并且以逗号命名的变量只是被声明以供以后在函数中使用 - 为简单起见?通过交换,最后似乎只使用“旧 A”或“临时”。如果这就是您要使用的全部,那么完成这 3 个步骤的目的是什么?再次感谢您的时间!
    • 是的,它是用逗号分隔的三个变量声明。一个包括一项任务。在函数顶部声明变量是常见的做法。这不是必需的,但很多人都会这样做。我不清楚你在第二部分要问什么。在 shuffle 代码中,重点是交换数组的两个元素,因此 array[currentIndex] array[randomIndex] 交换了数组中的位置。
    • 附注有些人(包括我)不喜欢逗号分隔的声明。很容易忘记逗号,这意味着您最终会意外声明全局变量。
    • 啊!知道了!出于某种原因,我从纯数字的角度而不是数组位置的角度来看它!现在完全有意义!太感谢了!我的新鲜感正在显示哈哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 2017-07-08
    相关资源
    最近更新 更多