Looking for a solution to this problem I have tried to follow several procedures suggested so far on SO but neither worked.
I want to select a random number of random unique items from selected array. In order to do that, I've written the following function, which always returns duplicates instead of unique items:
function getRandomItemsCombination(min, max, totalWeight, sourceArray){
var items = {};
//var itemsCount = Math.floor(Math.random() * (max - min + 1)) + min;
var itemsCount = random.integer(min, max);
var itemWeights = []
for(var i = 0; i < itemsCount; i++){
itemWeights.push(Math.random())
}
var sizesSum = itemWeights.reduce(function(pv, cv) { return pv + cv; }, 0);
for(var i = 0; i < itemsCount; i++){
itemWeights[i] = Math.floor(itemWeights[i]/sizesSum*totalWeight);
}
//var randomItem = getRandomArrayElement(sourceArray);
var randomItem;
var arrIntegers = []
while(arrIntegers.length < itemsCount){
var randomnumber=Math.ceil(Math.random()*(sourceArray.length - 1))
var found=false;
for(var i=0;i<arrIntegers.length;i++){
if(arrIntegers[i]==randomnumber){found=true;break}
}
if(!found)arrIntegers[arrIntegers.length]=randomnumber;
}
items.items = [];
var randomItemsIndex = {};
items.quantities = [];
var existing = false;
for(var i = 0; i < itemsCount; i++){
randomItem = sourceArray[arrIntegers[i]];
var index = randomItemsIndex[randomItem.Long_desc];
if(index == undefined){
index = items.items.length;
randomItemsIndex[randomItem.Long_desc] = index;
existing = false;
}
else {
existing = true;
}
items.items[index] = randomItem;
if(existing){
items.quantities[index] += itemWeights[i];
} else {
items.quantities[index] = itemWeights[i];
}
existing = false;
}
return items;
}
Does anyone know why it doesn't return unique items?
Thanks!
Aucun commentaire:
Enregistrer un commentaire