简介
在本实验中,我们将探索如何在 JavaScript 中实际实现一个加权采样函数。该函数从一个数组中返回一个随机元素,并根据提供的权重为每个元素分配概率。通过本实验,我们将学习如何使用诸如 reduce() 和 findIndex() 等数组方法,以及 Math.random() 来生成预期的结果。
在本实验中,我们将探索如何在 JavaScript 中实际实现一个加权采样函数。该函数从一个数组中返回一个随机元素,并根据提供的权重为每个元素分配概率。通过本实验,我们将学习如何使用诸如 reduce() 和 findIndex() 等数组方法,以及 Math.random() 来生成预期的结果。
要根据提供的权重从数组中随机获取一个元素,请遵循以下步骤:
node以开始练习编码。Array.prototype.reduce()为weights中的每个值创建一个部分和的数组。Math.random()生成一个随机数,并使用Array.prototype.findIndex()根据先前生成的数组找到正确的索引。arr中具有生成索引的元素。以下是实现此目的的代码:
const weightedSample = (arr, weights) => {
let roll = Math.random();
return arr[
weights
.reduce(
(acc, w, i) => (i === 0 ? [w] : [...acc, acc[acc.length - 1] + w]),
[]
)
.findIndex((v, i, s) => roll >= (i === 0 ? 0 : s[i - 1]) && roll < v)
];
};
你可以通过将数组及其相应的权重作为参数传递来测试此函数:
weightedSample([3, 7, 9, 11], [0.1, 0.2, 0.6, 0.1]); // 9
恭喜你!你已经完成了加权采样实验。你可以在 LabEx 中练习更多实验来提升你的技能。