Введение
В этом лабе мы исследуем практическую реализацию функции взвешенной выборки в JavaScript. Функция возвращает случайный элемент из массива, при этом каждому элементу назначаются вероятности на основе предоставленных весов. С помощью этого лабы мы узнаем, как использовать методы массива, такие как reduce() и findIndex(), вместе с Math.random(), чтобы получить желаемый результат.
Как получить взвешенную выборку из массива в JavaScript
Чтобы случайным образом получить элемент из массива на основе предоставленных весов, следуйте этим шагам:
- Откройте Терминал/SSH и введите
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, чтобы улучшить свои навыки.