【发布时间】:2017-02-21 11:34:12
【问题描述】:
上周我在做一个简单的程序时遇到了一些问题,这里有人帮助了我。现在我遇到了另一个问题。 我目前有这个代码:
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将您的搜索限制在给定的类别? -
您的意思是 can be found 只能针对该类别出现“Dang!”消息,而应完全忽略所有其他项目?
-
谢谢,我会调查的!
-
是的 trincot,这正是我要找的! :)
标签: javascript arrays probability