Хочу получить рандомное не повт. число.
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, время: 23:43. |