在理解代码方面需要您的帮助。如果我在我的程序中使用来自 lodash 的 sampleSize 函数,它可以按预期工作。但是当我直接在我的程序中使用 sampleSize 的代码(https://github.com/lodash/lodash/blob/master/sampleSize.js)时,它没有按预期工作。主要问题是,在该代码中,我们并没有将“结果”限制为只有“n”个元素。所以“数组”的长度和“结果”的长度是相同的,这是不正确的。我重写了程序以给出预期的结果。但仍然想了解 lodash.sampleSize 它是如何工作的。谢谢!!
这是我的代码
sampleSize(array, n) {
const length = array == null ? 0 : array.length
if (!length || n < 1) {
return []
}
n = n > length ? length : n
//console.log("n is",n)
let index = -1
//const lastIndex = n - 1
const result = array.slice()
while (++index < n) {
const rand = index + Math.floor(Math.random() * (length - index ))
//console.log("rand is",rand)
const value = result[rand]
result[rand] = result[index]
result[index] = value
}
//console.log("result is",result.slice(0,n))
return result.slice(0,n)
}