阵列中的采样值具有良好的性能

sampling values in array with good performance

本文关键字:性能 采样 阵列      更新时间:2023-09-26

我有一个函数,它接受一个值数组和采样率。函数应按采样率随机删除值。例如,20%的采样率应该去除20%的值。我如何才能以非常好的性能实现这一点,因为我将迭代超过10000个值?

我的想法有点像

for(var i = values.length-1; i >= 0; i--){
    var rnd = Math.floor((Math.random() * 100) + 1);
    if(rnd < samplingRate)
        values.splice(i,1);
}

但我认为CCD_ 1函数不是性能选择。

如果只想对整个数组的20%进行操作,那么实际上没有必要对其进行迭代。
循环n次,其中n = Math.floor(0.20 * originalArray.length) - 1和每次迭代从数组中获取一个随机元素并将其移除。

除非您需要支持较旧的浏览器,否则请使用.filter()方法:

var samplingPercentage = samplingRate / 100;
var filtered = values.filter(function() {
  return Math.random() < samplingPercentage;
});