先週、私はやっている簡単なプログラムにいくつかの問題があり、ここで誰かが私を助けました。今私は別の問題に遭遇しました。 は、私は現在、このコードを持っている:重み付けされた確率と値を使って配列内のアイテムを見つける
var findItem = function(desiredItem) {
var items = [
{ item: "rusty nail", probability: 0.25 },
{ item: "stone", probability: 0.23 },
{ item: "banana", probability: 0.20 },
{ item: "leaf", probability: 0.17 },
{ item: "mushroom", probability: 0.10 },
{ item: "diamond", probability: 0.05 }
];
var possible = items.some(({item, probability}) =>
item === desiredItem && probability > 0);
if (!possible) {
console.log('There is no chance you\'ll ever find a ' + desiredItem);
return;
}
var sum = items.reduce((sum, {item, probability}) => sum+probability, 0);
while (true) {
var value = Math.random() * sum;
var lootedItem = items.find(
({item, probability}) => (value -= probability) <= 0).item;
if (lootedItem === 'diamond') break;
console.log("Dang! A " + lootedItem + " was found...");
}
console.log("Lucky! A " + desiredItem + " was found!");
}
findItem('diamond');
今、私はitems
配列にcategory
と呼ばれる別の値を追加することで、この上で拡大したいと思います。カテゴリの値を2
,5
または10
のいずれかにします。したがってdiamond
アイテムがcategory: 10
に属し、findItem
が実行された場合、同じカテゴリに属するアイテムだけが見つかるとします。私は数日のうちに努力してきましたが、その周りに頭を浮かべているようには見えません。誰かが私を正しい方向に押し込むのを助けるかもしれないのでしょうか?事前に感謝
['filter'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)を使用して検索を特定のカテゴリに限定しますか? –
「ダン!」メッセージは、そのカテゴリに対してのみ発生する可能性があり、他のすべての項目は完全に無視されるべきであることがわかりますか? – trincot
ありがとう、私はそれを調べます! –