3 deleted 5 characters in body edited Aug 20 '11 at 17:44 jfriend00 3,53099 silver badges1818 bronze badges I'd suggest you select a random number that's from 0 to the total weight of your fish. Then, each fish can have a piece of that random range according to it's weight which gives it the weighting you want. This ends up giving each fish a number of buckets that corresponds to it's weighting value and then you pick a random number from 0 to the total number of buckets and find out who's bucket the random number landed in. It's the same idea as turning each weighting number into a percentage change and then picking a random number from 0 to 99. This code should do that: var FISH = { "level1": [ //["name", xp, weight] ["Shrimp", 10, 95], ["Sardine", 20, 85], ["Herring", 30, 75], ["Anchovies", 40, 65], ["Mackerel", 40, 55] ] }; function getRandomFish(level) { var fishForLevel = FISH[level]; var fishTotalWeight = 0, fishCumWeight = 0, i; // sum up the weights for (i = 0; i < fishForLevel.length; i++) { fishTotalWeight += fishForLevel[i][2]; } var random = Math.floor(Math.random() * fishTotalWeight); // now find which bucket out random value is in for (i = 0; i < fishForLevel.length; i++) { fishCumWeight += fishForLevel[i][2]; if (random < fishCumWeight) { return(fishForLevel[i]); } } }  I'd suggest you select a random number that's from 0 to the total weight of your fish. Then, each fish can have a piece of that random range according to it's weight which gives it the weighting you want. This code should do that: var FISH = { "level1": [ //["name", xp, weight] ["Shrimp", 10, 95], ["Sardine", 20, 85], ["Herring", 30, 75], ["Anchovies", 40, 65], ["Mackerel", 40, 55] ] }; function getRandomFish(level) { var fishForLevel = FISH[level]; var fishTotalWeight = 0, fishCumWeight = 0, i; // sum up the weights for (i = 0; i < fishForLevel.length; i++) { fishTotalWeight += fishForLevel[i][2]; } var random = Math.floor(Math.random() * fishTotalWeight); // now find which bucket out random value is in for (i = 0; i < fishForLevel.length; i++) { fishCumWeight += fishForLevel[i][2]; if (random < fishCumWeight) { return(fishForLevel[i]); } } }  I'd suggest you select a random number that's from 0 to the total weight of your fish. Then, each fish can have a piece of that random range according to it's weight which gives it the weighting you want. This ends up giving each fish a number of buckets that corresponds to it's weighting value and then you pick a random number from 0 to the total number of buckets and find out who's bucket the random number landed in. It's the same idea as turning each weighting number into a percentage change and then picking a random number from 0 to 99. This code should do that: var FISH = { "level1": [ //["name", xp, weight] ["Shrimp", 10, 95], ["Sardine", 20, 85], ["Herring", 30, 75], ["Anchovies", 40, 65], ["Mackerel", 40, 55] ] }; function getRandomFish(level) { var fishForLevel = FISH[level]; var fishTotalWeight = 0, fishCumWeight = 0, i; // sum up the weights for (i = 0; i < fishForLevel.length; i++) { fishTotalWeight += fishForLevel[i][2]; } var random = Math.floor(Math.random() * fishTotalWeight); // now find which bucket out random value is in for (i = 0; i < fishForLevel.length; i++) { fishCumWeight += fishForLevel[i][2]; if (random < fishCumWeight) { return(fishForLevel[i]); } } }  2 deleted 5 characters in body edited Aug 20 '11 at 17:39 jfriend00 3,53099 silver badges1818 bronze badges I'd suggest you select a random number that's from 0 to the total weight of your fish. Then, each fish can have a piece of that random range according to it's weight which gives it the weighting you want. This code should do that: var FISH = { "level1": [ //["name", xp, weight] ["Shrimp", 10, 95], ["Sardine", 20, 85], ["Herring", 30, 75], ["Anchovies", 40, 65], ["Mackerel", 40, 55] ] }; function getRandomFish(level) { var fishForLevel = FISH[level]; var fishTotalWeight = 0, fishCumWeight = 0;0, i; // sum up the weights for (var i = 0; i < fishForLevel.length; i++) { fishTotalWeight += fishForLevel[i][2]; } var random = Math.floor(Math.random() * fishTotalWeight); // now find which bucket out random value is in for (var i = 0; i < fishForLevel.length; i++) { fishCumWeight += fishForLevel[i][2]; if (random < fishCumWeight) { return(fishForLevel[i]); } } }  I'd suggest you select a random number that's from 0 to the total weight of your fish. Then, each fish can have a piece of that random range according to it's weight which gives it the weighting you want. This code should do that: var FISH = { "level1": [ //["name", xp, weight] ["Shrimp", 10, 95], ["Sardine", 20, 85], ["Herring", 30, 75], ["Anchovies", 40, 65], ["Mackerel", 40, 55] ] }; function getRandomFish(level) { var fishForLevel = FISH[level]; var fishTotalWeight = 0, fishCumWeight = 0; // sum up the weights for (var i = 0; i < fishForLevel.length; i++) { fishTotalWeight += fishForLevel[i][2]; } var random = Math.floor(Math.random() * fishTotalWeight); // now find which bucket out random value is in for (var i = 0; i < fishForLevel.length; i++) { fishCumWeight += fishForLevel[i][2]; if (random < fishCumWeight) { return(fishForLevel[i]); } } }  I'd suggest you select a random number that's from 0 to the total weight of your fish. Then, each fish can have a piece of that random range according to it's weight which gives it the weighting you want. This code should do that: var FISH = { "level1": [ //["name", xp, weight] ["Shrimp", 10, 95], ["Sardine", 20, 85], ["Herring", 30, 75], ["Anchovies", 40, 65], ["Mackerel", 40, 55] ] }; function getRandomFish(level) { var fishForLevel = FISH[level]; var fishTotalWeight = 0, fishCumWeight = 0, i; // sum up the weights for (i = 0; i < fishForLevel.length; i++) { fishTotalWeight += fishForLevel[i][2]; } var random = Math.floor(Math.random() * fishTotalWeight); // now find which bucket out random value is in for (i = 0; i < fishForLevel.length; i++) { fishCumWeight += fishForLevel[i][2]; if (random < fishCumWeight) { return(fishForLevel[i]); } } }  1 answered Aug 20 '11 at 17:22 jfriend00 3,53099 silver badges1818 bronze badges I'd suggest you select a random number that's from 0 to the total weight of your fish. Then, each fish can have a piece of that random range according to it's weight which gives it the weighting you want. This code should do that: var FISH = { "level1": [ //["name", xp, weight] ["Shrimp", 10, 95], ["Sardine", 20, 85], ["Herring", 30, 75], ["Anchovies", 40, 65], ["Mackerel", 40, 55] ] }; function getRandomFish(level) { var fishForLevel = FISH[level]; var fishTotalWeight = 0, fishCumWeight = 0; // sum up the weights for (var i = 0; i < fishForLevel.length; i++) { fishTotalWeight += fishForLevel[i][2]; } var random = Math.floor(Math.random() * fishTotalWeight); // now find which bucket out random value is in for (var i = 0; i < fishForLevel.length; i++) { fishCumWeight += fishForLevel[i][2]; if (random < fishCumWeight) { return(fishForLevel[i]); } } }