2016-11-24 3 views
0

Функциональность:Предельное элемент в массиве появляться X раз

Контейнер дисплей будет отображать рандомизированное элемент из массива. Каждый элемент в массиве может отображаться только x no. раз.

Выпуск:

Я не уверен, о том, как ограничить каждый отдельный элемент в массиве, который будет отображаться х нет. раз.

Я рандомизировал все элементы в массиве, поэтому в этот момент элементы в массиве будут отображаться всякий раз, когда они рандомизированы и не ограничены.

Каждый из элементов в массиве - это имя файла.

Поэтому, как я в состоянии ограничить количество раз, когда каждый элемент массива отображается

Например:

Библиотека/изображение/Ваучер/Andn.png => может отображаться только 3 раз

Библиотека/изображение/Ваучер/Brelk.png => может отображаться только один раз

Библиотека/изображения/Ваучер/Cele.png => может отображаться только в 6 раз

Библиотека/изображение/Ваучер/Chrm.png => может отображаться только в 13 раз

Код:

var DisplayOfferArray = ["lib/image/Voucher/Andn.png", "lib/image/Voucher/Brelk.png", "lib/image/Voucher/Cele.png", "lib/image/Voucher/Chrm.png"]; 
 

 

 
var printOfferFrame = ""; 
 
var Offer_list = []; 
 
var random_Offer; 
 

 

 
//randomise Offer Array 
 
random_Offer = Math.floor(Math.random() * DisplayOfferArray.length); 
 
Offer_list.push(random_Offer); 
 

 

 
//Display randomised Offer from offer array 
 
$("#Offer_Description").attr('src', DisplayOfferArray[random_Offer]).show();
<img id="Offer_Description" style="position:absolute; width: 950px; height:565px; top:640px; left:70px; z-index=99; margin:auto;">

ответ

0

следить за каждое использование! изменить массив следующим образом:

var DisplayOfferArray = [{"src" : "lib/image/Voucher/Andn.png", "usage" : **N**}, ...]; 

, а затем изменить свой генератор случайного индекса к этому:

random_Offer = Math.floor(Math.random() * DisplayOfferArray.length); 
while (DisplayOfferArray[random_Offer].usage == 0) random_Offer = Math.floor(Math.random() * DisplayOfferArray.length); 
DisplayOfferArray[random_Offer].usage --; 
+0

так, после чего я все еще может выполнить эту строку кода в соответствии с нормальным: 'Offer_list.push (random_Offer);', правильно ?? – Luke

+0

Ваше решение не работает. Я бы предположил, что при использовании 0, он больше не должен быть рандомизирован, но удалять. чтобы предотвратить случайное ранжирование массива элемента – Luke

+0

для вашего первого вопроса, ответ да! и для вашего второго вопроса это не имеет значения, если у вас слишком много элементов в этом массиве! если ваш массив мал, то удаление его из массива занимает больше времени, чем повторное рандомизация! –

0

Я хотел бы использовать карту, чтобы следить за разы значение было использовано:

var DisplayOfferArray = [{ 
 
    value: "lib/image/Voucher/Andn.png", 
 
    current: 0, 
 
    max: 2, 
 
    }, { 
 
    value: "lib/image/Voucher/Brelk.png", 
 
    current: 0, 
 
    max: 3, 
 
    }, { 
 
    value: "lib/image/Voucher/Cele.png", 
 
    current: 0, 
 
    max: 4, 
 
    }, { 
 
    value: "lib/image/Voucher/Chrm.png", 
 
    current: 0, 
 
    max: 5, 
 
    }, 
 
]; 
 

 
function getOffer() { 
 
    var random_Offer = Math.floor(Math.random() * DisplayOfferArray.length); 
 

 
    var offer = DisplayOfferArray[random_Offer]; 
 

 
    if (offer.current >= offer.max) { 
 
    // remove the offer from array to prevent infinite loop 
 
    DisplayOfferArray.splice(random_Offer, 1); 
 
    return getOffer(); 
 
    } 
 

 
    offer.current++; 
 
    return offer.value; 
 
}; 
 

 
//Display randomised Offer from offer array 
 
$("#Offer_Description").attr('src', getOffer()).show();
<img id="Offer_Description" style="position:absolute; width: 950px; height:565px; top:640px; left:70px; z-index=99; margin:auto;">

0

Попробуйте вот так: Подсчет индекса массива с другим массивом. И сопоставьтесь с каждым из index из calc array.It сохранит значение приращения. Затем сопоставление с условием. И раздельно с корпусом коммутатора.

var calc =['1','1','1','1']; 
 
var some = setInterval(function(){ 
 
var DisplayOfferArray = ["lib/image/Voucher/Andn.png", "lib/image/Voucher/Brelk.png", "lib/image/Voucher/Cele.png", "lib/image/Voucher/Chrm.png"]; 
 

 

 
var printOfferFrame = ""; 
 
var Offer_list = []; 
 
var random_Offer; 
 

 

 
//randomise Offer Array 
 
random_Offer = Math.floor(Math.random() * DisplayOfferArray.length); 
 
Offer_list.push(random_Offer); 
 

 
switch(random_Offer){ 
 
    case 0: 
 
     if(calc[random_Offer] < 3){calc[random_Offer] ++; 
 
       $("#Offer_Description").attr('src', DisplayOfferArray[random_Offer])} 
 
    break; 
 
     case 1: 
 
     if(calc[random_Offer] < 1){calc[random_Offer] ++; 
 
    $("#Offer_Description").attr('src', DisplayOfferArray[random_Offer])} 
 
    break; 
 
     case 2: 
 
     if(calc[random_Offer] < 6){calc[random_Offer] ++; 
 
     $("#Offer_Description").attr('src', DisplayOfferArray[random_Offer])} 
 
    break; 
 
     case 3: 
 
     if(calc[random_Offer] < 13){calc[random_Offer] ++; 
 
     $("#Offer_Description").attr('src', DisplayOfferArray[random_Offer])} 
 
    break; 
 
    } 
 
     
 
    document.getElementsByTagName('p')[0].innerHTML=calc.join(":"); 
 
    },100);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<img id="Offer_Description" style="position:absolute; width: 950px; height:565px; top:640px; left:70px; z-index=99; margin:auto;"> 
 
<p></p>

0

Вы можете следить, сколько раз используется значение, но вы можете также выбрать, чтобы заполнить второстепенную массив со всеми значениями, сколько раз они могут иметь место и отображать случайное значение из этого массива, удалив использованный элемент в процессе.

//Not strictly necessary, but for easy of maintenance keep the count inside the same object 
 
let DisplayOfferArray = [{img:"lib/image/Voucher/Andn.png",cnt:3},{img: "lib/image/Voucher/Brelk.png",cnt:1}, {img:"lib/image/Voucher/Cele.png",cnt:6}, {img:"lib/image/Voucher/Chrm.png",cnt:13}]; 
 

 
//fill Offer_List with all items 
 
let Offer_list = DisplayOfferArray.reduce((arr,o)=>{for(let i=0; i<o.cnt; i++)arr.push(o); return arr;}, []); 
 

 
function getNextOffer(){ 
 
\t let index = \t Math.floor(Math.random() * Offer_list.length); //random index in the remaining items 
 
    return Offer_list.splice(index,1)[0].img; 
 
} 
 

 
while(Offer_list.length) //emulate loop. this is probably done in realtime with some timeout function 
 
\t console.log(getNextOffer()); //for test, display the result (you can set the image with the results of getNextOffer())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

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