我想生成一个长度为n
的数组,并且数组的元素是2到32之间的随机整数。我使用函数follow但我发现17将永远是第一个元素返回数组。更重要的是,当我将功能排序为sort(() => Math.random() - 0.5)
时,它运作良好。
所以我很困惑Math.random() >= 0.5
和Math.random() - 0.5
之间的区别是什么?这些差异如何影响sort()
函数?
const fn = (n) => {
let arr = [];
for (let i = 2; i < 33; i++) {
arr.push(i);
}
return arr.sort(() => Math.random() >= 0.5).slice(0, n)
}
&#13;
答案 0 :(得分:5)
您没有使用sort
用于它的预期目的,因此结果不可预测,很奇怪,并且可能因浏览器实现而异。 如果您希望随机播放数组here is a far better function。
传递给Array.sort()
的函数应接受两个参数x和y,如果x&lt;则返回负值。 y,如果x = y则为零,或者如果x> y则为正值;收率
在第一次尝试中,使用sort(() => Math.random() >= 0.5)
,它返回一个布尔值;这将被转换为0或1.这意味着你的函数告诉分类器你输入的任何第一个参数总是等于或大于你传入的任何第二个参数。它只是发生每次调用函数时,17都作为第二个参数传入;你告诉浏览器它是否小于或等于数组中的每个其他元素,因此它将被放在数组的开头。
您的第二次尝试({1}}以相同的概率返回第一个数字大于第二个数字,反之亦然,这使得随机播放工作更好。但是,由于整个事物的不可靠性,因此无法保证shuffle可以在所有浏览器中运行或者特别随机。 请使用上面链接的“真实”随机播放算法。
来源:http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.sort
答案 1 :(得分:-1)
对于js sort
,参数是compare function
,需要返回3个值:negative, zero, positive
小于,等于和大于。{/ p>
如果您使用>=
,则只返回boolean
。