2015-09-07 86 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上的所有解決方案應該是本地實現,而不是庫函數。 –