2015-09-07 51 views
0

寻找解决这个问题的方法我试图按照迄今为止在SO上提出的几个程序,但都没有工作。从数组中获得独特的随机项目

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

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; 
} 

有谁知道为什么它不返回独特的项目?

谢谢!

+0

你的代码做什么都在那里? – Mritunjay

+0

您能解释min,max和totalWeight参数的用途吗?完全基于你提供的描述,他们似乎不是必要的。 (我没有追踪所有的代码。) –

回答

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

+0

我不认为这真的解释了为什么他的例子不从数组中选择独特的元素。 –

+1

我成功地让他成为从阵列中选择独特元素的非常快速简单的方法。为什么他应该写这个代码?当此代码写入之前,他耗费了时间。 –

+0

此解决方案没有解决根本问题,也没有帮助OP解决他的特定问题。他想知道_为什么他的方法不起作用,而不是如何去做。除非另有说明,否则SO上的所有解决方案应该是本地实现,而不是库函数。 –