从数组中获取唯一的随机项

时间:2015-09-07 04:28:46

标签: javascript arrays random

寻找这个问题的解决方案我试图遵循目前为止建议的几个程序,但都没有工作。

我想从所选数组中选择一个随机数的随机唯一项。为了做到这一点,我写了以下函数,它总是返回重复项而不是唯一项:

function getRandomItemsCombination(min, max, sourceArray){
    var items = {};
    //var itemsCount = Math.floor(Math.random() * (max - min + 1)) + min;
    var itemsCount = random.integer(min, max);
    //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;
        existing = false;
    }
    return items;
}

有谁知道它为什么不归还独特的物品?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用underscorejs sample函数

_.sample(list, [n])
  

从列表中生成随机样本。传递一个数字返回n   列表中的随机元素。否则将是一个随机项目   返回。

_.sample([1, 2, 3, 4, 5, 6]);
=> 4

_.sample([1, 2, 3, 4, 5, 6], 3);
=> [1, 6, 2]

http://underscorejs.org/#sample