はじめに
この実験では、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 でさらに多くの実験を練習することができます。