是否可以使用Array.prototype.reduce创建一个线性随机选择的数组?

帕特里克·罗伯茨

使用Array.prototype.reduce(或Array.prototype.reduceRight的签名,是否有可能从数组中为所有索引选择具有相等概率的项目?这是我的尝试:

document.write(`
${[...'abcdefghijklmnopqrstuvwxyz'].reduce(function(last, next, index, array) {
  if (Math.random() > index / array.length) {
    return next;
  }

  return last;
})}
`);

经过几次测试运行后,分布似乎偏向于较低的索引(也就是说,较高的索引被更频繁地选择)。

保罗

您可以为此使用储层采样:始终选择第一个元素,然后在遍历数组时,以概率用第k(基于1的索引)项替换当前选择的1/k这将给您统一的概率:

document.write(`
${[...'abcdefghijklmnopqrstuvwxyz'].reduce(function(last, next, index, array) {
  if ( Math.random()*(index + 1) <= 1 ) {
    return next;
  }

  return last;
})}
`);

这是一个测试证明它确实以相同的概率返回每个字母:

var results = {};
for ( var i = 0; i < 100000; i++ ) {
    var choice = [...'abcdefghijklmnopqrstuvwxyz'].reduce(function(last, next, index, array) {
        if ( Math.random()*(index + 1) <= 1 ) {
            return next;
        }

        return last;
    } );
    results[ choice ] = (results[ choice ] || 0) + 1;
}

document.body.innerHTML = '<pre>' + JSON.stringify( results, '\t' ) + '</pre>';

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以使用Array.prototype.reduce创建一个线性随机选择的数组?

来自分类Dev

是否可以操纵Array.prototype.reduce的索引参数?

来自分类Dev

是否可以使用Array()创建二维数组?

来自分类Dev

是否可以使用多个 xpath 的词干部分来创建一个程序来随机选择一个?(硒)

来自分类Dev

Javascript测验-使用Array.prototype以随机顺序显示选择

来自分类Dev

Typescript可以使用使用元素类型参数的方法扩展Array.prototype吗?

来自分类Dev

在 Array.prototype.reduce 中使用不纯的 reducer 是否安全?

来自分类Dev

是否有一个与javascript的Array.prototype.every方法等效的红宝石?

来自分类Dev

与Array.prototype.reduce的数组交集(理论集)

来自分类Dev

与Array.prototype.reduce的数组交集(理论集)

来自分类Dev

Array.prototype无需修改原始数组

来自分类Dev

将JavaScript Array.prototype.map与作用域变量一起使用是否不好?

来自分类Dev

是否可以使用一个相等的对象字段在包含对象的数组上使用包含?

来自分类Dev

是否可以使用 Angular 在显示的列表中选择一个元素

来自分类Dev

是否可以使用@ azure / cosmos sdk创建一个新的CosmosDB帐户?

来自分类Dev

使用Array.prototype.slice()深度复制数组

来自分类Dev

使用Array.prototype.reverse()反转数组的元素

来自分类Dev

是否可以使用模型创建状态选择?

来自分类Dev

是否可以使用.map()从对象数组创建对象?

来自分类Dev

是否可以使用if语句创建2个where子句?

来自分类Dev

如何使用ES6类创建一个不继承自Object.prototype的类?

来自分类Dev

是否可以使用另一个select语句的结果创建一个select语句?

来自分类Dev

JavaScript:是否可以替换Array.prototype.indexOf之类的函数?

来自分类Dev

是否可以操纵Array.prototype.map()的index参数?

来自分类Dev

是否可以操纵Array.prototype.map()的index参数?

来自分类Dev

JavaScript:是否可以替换Array.prototype.indexOf之类的函数?

来自分类Dev

我可以在 Array.prototype.map 中使用模数以每 3 个索引插入新行吗?

来自分类Dev

Python:是否可以使用reduce()进行相同的操作?

来自分类Dev

使用js reduce()创建键值对,并创建一个数组作为值

Related 相关文章

  1. 1

    是否可以使用Array.prototype.reduce创建一个线性随机选择的数组?

  2. 2

    是否可以操纵Array.prototype.reduce的索引参数?

  3. 3

    是否可以使用Array()创建二维数组?

  4. 4

    是否可以使用多个 xpath 的词干部分来创建一个程序来随机选择一个?(硒)

  5. 5

    Javascript测验-使用Array.prototype以随机顺序显示选择

  6. 6

    Typescript可以使用使用元素类型参数的方法扩展Array.prototype吗?

  7. 7

    在 Array.prototype.reduce 中使用不纯的 reducer 是否安全?

  8. 8

    是否有一个与javascript的Array.prototype.every方法等效的红宝石?

  9. 9

    与Array.prototype.reduce的数组交集(理论集)

  10. 10

    与Array.prototype.reduce的数组交集(理论集)

  11. 11

    Array.prototype无需修改原始数组

  12. 12

    将JavaScript Array.prototype.map与作用域变量一起使用是否不好?

  13. 13

    是否可以使用一个相等的对象字段在包含对象的数组上使用包含?

  14. 14

    是否可以使用 Angular 在显示的列表中选择一个元素

  15. 15

    是否可以使用@ azure / cosmos sdk创建一个新的CosmosDB帐户?

  16. 16

    使用Array.prototype.slice()深度复制数组

  17. 17

    使用Array.prototype.reverse()反转数组的元素

  18. 18

    是否可以使用模型创建状态选择?

  19. 19

    是否可以使用.map()从对象数组创建对象?

  20. 20

    是否可以使用if语句创建2个where子句?

  21. 21

    如何使用ES6类创建一个不继承自Object.prototype的类?

  22. 22

    是否可以使用另一个select语句的结果创建一个select语句?

  23. 23

    JavaScript:是否可以替换Array.prototype.indexOf之类的函数?

  24. 24

    是否可以操纵Array.prototype.map()的index参数?

  25. 25

    是否可以操纵Array.prototype.map()的index参数?

  26. 26

    JavaScript:是否可以替换Array.prototype.indexOf之类的函数?

  27. 27

    我可以在 Array.prototype.map 中使用模数以每 3 个索引插入新行吗?

  28. 28

    Python:是否可以使用reduce()进行相同的操作?

  29. 29

    使用js reduce()创建键值对,并创建一个数组作为值

热门标签

归档