gpt4 book ai didi

javascript - 灵活使用 Math.random

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:50:05 24 4
gpt4 key购买 nike

我想创建一个 4 个字母长的字符串,随机包含字符串中的任何字母:“ROYGBV”。

我所做的是这样的:

function generateSolution(){
var colors = "ROYGBV";
var str = "";
for (var i=0; i<4; i++) {
var loc = Math.ceil( Math.random()*colors.length );
str += colors.charAt(loc);
}

return str;
}

但这似乎不对,这是为什么呢?

此外,这是来自练习的解决方案:

str += colors.charAt((Math.random() * 6) | 0);

我在我的解决方案中使用了 Math.ceil 来防止像 4.333123 这样的随机 float 等等。如果不对随机数进行四舍五入,该解决方案如何工作?

此外,| 运算符是什么意思?以及第二种解决方案中的随机化实际上是如何工作的?

最佳答案

|bitwise OR operator .由于 JavaScript 中的按位运算仅适用于 32 位整数,因此这是将数字四舍五入为 0 的一种简写方式。在您的情况下,它等同于:

colors.charAt(Math.floor((Math.random() * 6)));

数字需要取底而不是向上舍入,就像您当前使用 ceil 所做的那样,否则您将错过数组的第一个元素(索引为 0)。

这是从 the spec 转换为整数的完整细节:

The production A : A @ B, where @ is one of the bitwise operators in the productions above, is evaluated as follows:

  1. Let lref be the result of evaluating A.
  2. Let lval be GetValue(lref).
  3. Let rref be the result of evaluating B.
  4. Let rval be GetValue(rref).
  5. Let lnum be ToInt32(lval).
  6. Let rnum be ToInt32(rval).
  7. Return the result of applying the bitwise operator @ to lnum and rnum. The result is a signed 32 bit integer.

关于javascript - 灵活使用 Math.random,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16086213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com