【发布时间】:2016-06-17 17:19:46
【问题描述】:
设置:
我第一次在一些客户的代码中使用_.sample(),我想测试它以确保它一次又一次地产生均匀分布的样本。
为了测试这一点,我创建了以下代码:
(function(arraySize, timesToRun){
arraySize = arraySize || 10;
timesToRun = timesToRun || 1000;
let myArray = Array.apply(null, {length: arraySize}).map(Number.call, Number);
let resultsArray = Array.apply(null, Array(arraySize)).map(Number.prototype.valueOf,0);
for (let i = 0; i < timesToRun; i++) {
var result = _.sample(myArray);
resultsArray[result]++;
}
return resultsArray;
})(10, 1000);
这在我的 Chrome 浏览器中完美运行,得到以下结果:
[93, 112, 97, 87, 97, 107, 97, 104, 105, 101]
正如预期的那样,使用其他输入 (20, 10000) 我们得到:
[646, 663, 641, 749, 648, 686, 642, 631, 663, 688, 691, 639, 672, 663, 678]
所以...就是这样,代码可以满足我的需要,完全可以接受。
这是我要找的:
以下说明:
如果回答可以回答这三个问题中的任何一个/所有问题,则将被接受。
- 我不明白
Array.apply(null, {length: arraySize}).map(Number.call, Number);是如何工作的。具体来说,让我非常困惑的部分是map调用中发生的事情:map(Number.call, Number)- 为什么这会产生一个看起来像[0,1,2,3,4,5,6,7,8,9]的数组?看到这个问题被分成不同的问题,我问了这个具体问题elsewhere - 为什么我们在
map(Number.prototype.valueOf,0)中需要Number.prototype.valueOf我把这个问题放到了一个新帖子this has been answered here - 有没有更好的方法将默认值设置为
arraySize和timesToRun? (注意:我在函数调用中放入相同的值只是为了说服 - 我知道这不是必需的。)
请对代码提出任何其他批评,我问这个问题是为了了解更多关于 Javascript 的信息,看看是否有任何明显的改进可以对这个函数进行。
愿望清单:
如果他们知道这样做的好方法,也许任何人都可以发表评论:
我想找到一种简洁的方法来为这个测试创建图形输出。有谁知道一个易于使用的库,以便我可以绘制它。也许更多的输入我们可以得到一个漂亮的钟形曲线? - Here is a simple way - 我把它放在这里是因为这个问题再一次被否决了,但我想为其他想要这样做的人提供信息。
重要提示!
此问题的格式不正确。我会将这个问题分解成更小的问题,并分别发布。我在阅读后进行了此编辑:https://blog.stackoverflow.com/2010/09/good-subjective-bad-subjective/
...好吧,我无法结束这个问题 - 所以我将把原来的帖子留在下面。如果有人决定回答这个问题,我仍在寻找这些问题的答案,我会接受。
【问题讨论】:
-
@robertklep 是的,我创建了代码。我从this SO question 找到的代码非常有用,并且像最好的方法一样接缝。但我不明白
(Number.Call, Number)实际上是如何做的。我了解它做什么,但我不明白为什么,或如何它做到这一点。我认为在 StackOverflow 上提问是可以的——这就是我来到这里的原因,以了解为什么会这样工作。我通过其他方式找不到答案 -
@MikeMcCaughan 我确实做了自己的研究。我不拘泥于任何事情——我只是想从 StackOverflow 的人那里寻找更深入的解释。我看到人们一直在推荐库和实现目标的方法,我认为专门提出这个要求是合适的。此外,其他人可以从提供的答案中学习。你会建议一个更好的方法来问这个问题吗?也许将其分解为几个较小的问题?根据您的个人资料,您是#SOreadytohelp - 请添加建设性的 cmets
-
您是否阅读了我在评论中添加的链接?前者详述了许多改进问题的方法,后者详述了图书馆推荐问题为何离题。
-
@MikeMcCaughan help center 将我指向Good Subjective Bad Subjective 阅读该页面后,我想我明白你的意思了。我会删除我的问题。
标签: javascript arrays underscore.js random-sample