2015-09-07 4 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

Это решение не затрагивает основную проблему и не помогает ОП с его конкретным вопросом. Он хочет знать, почему его метод не работает, а не _how_, чтобы сделать это. И если не указано иное, все решения на SO должны быть встроенными реализациями, а не библиотечными функциями. –

Смежные вопросы