3 回答
TA贡献1818条经验 获得超8个赞
尝试以下无损(快速)功能:
function getRandom(arr, n) {
var result = new Array(n),
len = arr.length,
taken = new Array(len);
if (n > len)
throw new RangeError("getRandom: more elements taken than available");
while (n--) {
var x = Math.floor(Math.random() * len);
result[n] = arr[x in taken ? taken[x] : x];
taken[x] = --len in taken ? taken[len] : len;
}
return result;
}
TA贡献1848条经验 获得超6个赞
仅两行:
// Shuffle array
const shuffled = array.sort(() => 0.5 - Math.random());
// Get sub-array of first n elements after shuffled
let selected = shuffled.slice(0, n);
TA贡献1779条经验 获得超6个赞
创建一个可以做到这一点的功能:
var getMeRandomElements = function(sourceArray, neededElements) {
var result = [];
for (var i = 0; i < neededElements; i++) {
result.push(sourceArray[Math.floor(Math.random()*sourceArray.length)]);
}
return result;
}
您还应该检查sourceArray是否有足够的元素要返回。如果要返回唯一元素,则应从sourceArray中删除选定的元素。
添加回答
举报