Хочу получить рандомное не повт. число.
var num = 3; var last = [] function pusk(){ for(var a = 0; a < 4; a++){ function randomNumbe (){ return Math.floor(Math.random()*3); } var randoM = randomNumbe; var neW = randoM(num); //1 if(last.length === 0){ //2 last.unshift(10) } var l = last.length for(var a = 0; a < l; a++){ //3 if(neW === last[a]){ return pusk() } } for(var k = 0; k < l; k++){//4 if(neW !== last[k]){ last.unshift(neW) break; } } } document.getElementById("pasha").addEventListener("click",pusk) // for( var i = 0; i < num.length; i++){ // if(neW === num[i]){ // num.splice(neW,1) // alert(num) // } // } } 1.Получаю ранд число 2.Это делается для того, чтобы добавить просто любое число в массив, чтобы он не был пустой и цикл for мог заработать (может как-то можно обойтись и без этого, подскажите) 3.Прошел по массиву и проверяю или новое число равно хотя бы одному прошлом числу, если да то функция запускается заново,пока не выпадет полн. новое число. Тут работает все прекрасно условие и шаг выполняются и проверяются после каждого ++. 4.В этом шаге выполняются аналогичные процессы только проверяется, если новое число не равно ни в коем случае старом, то оно добавляется в массив last. Проблема в том, что условие и шаг цикла не выполняется, итерация не происходит и не проверяется условие после каждого ++. Помогите очень вас прошу. Извините за такое написание кода, делаю в спешке |
Володимир,
создай массив с нужными числами и перемешай |
https://javascript.ru/forum/misc/713...tml#post469750
UPD Теперь в JS доступны генераторы, так что ещё можно так... На этот раз генерируем числа в диапазоне [1, 2**10 - 1]. Согласно таблице, для n = 10 степенями LFSR-2 являются 10 и 7. Вы можете подставить другие значения в зависимости от диапазона! (Эти степени указаны в скрипте на 50-ой строке) <!doctype html> <html> <head> <meta charset="utf-8"> <style> button { --theme: #f06; background-color: white; color: var(--theme); border: 2px solid var(--theme); padding: 1em; border-radius: 0.25em; font: bold 1.25em Helvetica, sans-serif; transition: 400ms; } button:hover { box-shadow: inset 0 0 0 3em var(--theme); color: white; } #list { display: flex; font: 1em "Helvetica Neue", "Segoe UI", Roboto, Ubuntu, sans-serif; flex-direction: column-reverse; counter-reset: generated-number 0; } #list span { display: flex; counter-increment: generated-number 1; padding: 1em; border: 1px solid #eee; border-radius: 5px; margin: 0.5em 0; word-break: break-all; } span::before { content: counter(generated-number) ". "; padding: 0 1em; word-break: normal; } </style> </head> <body> <button>Сгенерировать следующее число</button> <div id="list"></div> <script> function* getNonRepeatingNumberIterator() { const lfsr2 = [10, 7]; const INITIAL_NUMBER = 1 + (Math.pow(2, lfsr2[0]) - 1) * Math.random() | 0; console.log(INITIAL_NUMBER); let s = INITIAL_NUMBER; function getNextNumber(s) { // x**lfsr2[0] + x**lfsr2[1] + 1 = 0 return ((((s >> 0) ^ (s >> (lfsr2[0] - lfsr2[1]))) & 1) << (lfsr2[0] - 1)) | (s >> 1); } do yield s = getNextNumber(s); while(s !== INITIAL_NUMBER); } // использование let iterator = getNonRepeatingNumberIterator(); let iteratorStep; let list = document.getElementById("list"); document.querySelector("button").addEventListener("click", event => { iteratorStep = iterator.next(); if(iteratorStep.done) return; let span = document.createElement("span"); span.textContent = iteratorStep.value; list.appendChild(span); }); </script> </body> </html> |
Через метод contact или как?
И можете мне обьяснить почему второй for не хочет работать??? Очень вас прошу |
Спасибо,вам канешно,но для меня,сложно понять даный код(
|
Володимир,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <button id="pasha">click</button> <output id="out"> <script> var num = 3; var last; var arr = []; function randomNumbe() { return Math.floor(Math.random() * num); } function pusk() { if (arr.length === 0) { rnd: for (var a = 0; a < num; a++) { var randoM = randomNumbe(); if (last === randoM) { a--; continue rnd; } for (var i = 0; i < arr.length; i++) { if (arr[i] === randoM) { a--; continue rnd; } } arr.push(randoM); last = void 0; } } last = arr.shift(); document.getElementById("out").innerHTML += " " + last; } document.getElementById("pasha").addEventListener("click", pusk); </script> </body> </html> |
<script> function uniqueArray(count, maxNumber) { if (count > maxNumber) return new Error('count > maxNumber') const tmp = [] while (count) { const n = parseInt(Math.random() * maxNumber) !tmp.includes(n) && (tmp.push(n), count--) } return tmp } console.log(uniqueArray(10, 100)) console.log(uniqueArray(100, 10)) </script> |
Часовой пояс GMT +3, время: 05:48. |