【问题标题】:How "Math.random() * arr.length | 0" works for return a random index for an array"Math.random() * arr.length | 0" 如何返回数组的随机索引
【发布时间】:2017-09-14 03:39:03
【问题描述】:

我一直在处理具有特定功能的遗留代码,该功能应该为数组返回一个随机项,我看到以下表达式:

array[Math.random() * arr.length | 0]

我的第一印象是试图理解the | operator,但我不知道它是如何工作的。 我在 chrome 控制台中测试了表达式,我发现它总是返回一个有效的索引:

let array = [1,2,3,4]
for(let i = 0; i < 5000; i++){
   console.log(array[Math.random() * arr.length | 0]);
}

“Math.random() * arr.length | 0”如何为数组返回随机索引?

【问题讨论】:

    标签: javascript arrays random


    【解决方案1】:
    • Math.random() 返回一个 >= 0 和
    • * arr.length 返回一个数字 >= 0 和
    • | 0 将左表达式强制转换为整数,然后按位应用或使用数字零,这始终是另一个数字

    这就是说,使这项工作起作用的是运算符|中的隐式转换(称为强制转换)。

    【讨论】:

    • 哦!这只是 coerse to int number 的一种技巧!谢谢!
    • 是的,事实上,最好使用Math.trunc() 代替,意图更清晰。
    【解决方案2】:

    在这种情况下,| 0 用于向下舍入到最接近的整数。所以 Math.random 在 0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多