На прошлой неделе у меня были проблемы с простой программой, которую я делаю, и кто-то здесь помог мне. Теперь я столкнулся с другой проблемой. настоящее время у меня этот код:Найти элемент в массиве с использованием взвешенной вероятности и значения
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');
Теперь я хотел бы расширить, добавив еще одно значение, называемое category
к items
массива. Я хочу, чтобы категории имели значение 2
, 5
или 10
. Итак, допустим, что элемент diamond
будет принадлежать category: 10
, а когда выполняется findItem
, могут быть найдены только элементы, принадлежащие к той же категории. Я пробовал уже пару дней, но, похоже, не могу об этом подумать. Может, кто-то может помочь подтолкнуть меня в правильном направлении? Заранее спасибо
Используйте ['filter'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter), чтобы ограничить поиск данной категорией? –
Вы имеете в виду, что * может быть найдено *, что сообщение «Dang!» Может произойти только для этой категории, и все остальные элементы должны быть полностью проигнорированы? – trincot
Спасибо, я посмотрю! –