Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/75: Рейтинг темы: голосов - 75, средняя оценка - 4.87
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
1

Получить массив указанной длины с рандомными числами от и до без повторений

27.08.2019, 23:41. Показов 14420. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Вообще не силен в JS так как бонально не изучал его. Только синтаксис знаю.
Но движок использует Java Script и PIXI
Так вот. Как можно получить рандомно массив чисел от и до без повтарений. Но например размер массива равен 8
Мы указываем что нужно рандомно получить значения от 1 до 9
Так вот нужно в таком случае чтобы выпола 8 рандомных значений с числами от 1 до 9 но без повтарений.
Функция рандомного выпода числа от и до уже есть -
Javascript
1
2
3
4
static getRandomInRange(min, max) 
    {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
Я затрудняюсь как сделать выпад для массива без повтарений.
Я знаю про наличие метода Array.prototype.every() но проблема в том чтио движок его не поддерживает. Очевидно что в движке нет поддержки ECMA-262
На сайте с примером работы Array.prototype.every() сказано как его прекрутить но как не пытался но плагин в итоге не работает.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2019, 23:41
Ответы с готовыми решениями:

Как сформировать массив 20 нечетных чисел, и заполнить его рандомными числами без повторений?
Ломаю голову как можно сформировать масив непарных 20 чисел,и заполнить его рандомными числами без...

Заполнение массива рандомными числами без повторений
Здравствуйте! Пытаюсь заполнить массив рандомными числами без повторений, в коде есть проверка на...

Заполнение элементов вектора рандомными числами без повторений
Требуется заполнить 15 элементов вектора числами с 1 до 15, а последний элемент нулем Главное,...

Заполнить массив случайными числами без повторений
Написал процедуру для заполнения массива случайными числами без повторений. Алгоритм, вероятно,...

10
365 / 264 / 104
Регистрация: 28.08.2013
Сообщений: 631
28.08.2019, 00:45 2
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var arr = [];
var arrSize = 8;
for(var i=0; i<arrSize; i++){
    var value = getRandomInRange(1, 9);
    if(!checkArray(value)){ 
        arr.push(value); 
    }
    else{ 
        i--; 
    }
}
 
console.log(arr);
 
function getRandomInRange(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
 
function checkArray(x){
    var retValue = false;
    for(var i=0; i<arrSize; i++){
        if(arr[i] === x){
            retValue = true;
            break;
        }
    }
    return retValue;
}
Но нужно проверять количество елементов, иначе скрипт зависнит

Добавлено через 5 минут
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var arr = [];
var min = 1;
var max = 9;
var arrSize = max - min;
for(var i=0; i<arrSize; i++){
    var value = getRandomInRange(min, max);
    if(!checkArray(value)){
        arr.push(value);
    }
    else{
        i--;
    }
}
 
console.log(arr);
 
function getRandomInRange(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
 
function checkArray(x){
    var retValue = false;
    for(var i=0; i<arrSize; i++){
        if(arr[i] === x){
            retValue = true;
            break;
        }
    }
    return retValue;
}
0
Эксперт JS
2034 / 1093 / 408
Регистрация: 29.04.2016
Сообщений: 2,612
28.08.2019, 05:01 3
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Так вот нужно в таком случае чтобы выпола 8 рандомных значений с числами от 1 до 9 но без повтарений
Если рандомный порядок чисел в массиве это условие необязательное то может заполнить массив числами от 1 до 9 и удалить рандомно 1 число? -> https://codepen.io/Mr_Sergo/pen/aboWKPB

Javascript
1
2
3
4
5
6
7
8
9
10
var arr = [];
 
function rand(min,max){
    return Math.floor(Math.random() * (max + 1 - min) + min);
}
 
for(var i = 0; i < 9; i++) arr.push(i + 1);
arr.splice(arr.indexOf(rand(1,9)),1);
 
alert(arr);
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
28.08.2019, 06:00 4
Alexandr_7, длина массива и интервал случайных чисел как-то связаны? Если интервал равен длине, то можно так
Javascript
1
2
3
4
5
6
7
8
9
10
11
var array = [],
    min = 1,
    max = 9;
 
for (var i=min; i<max; i++) {
  array.push(i);
}
 
array.sort(function() { return Math.random() - 0.5});
 
console.log(array);
0
Эксперт JS
2034 / 1093 / 408
Регистрация: 29.04.2016
Сообщений: 2,612
28.08.2019, 09:01 5
Alexandr_7,


Если метод sort у вас поддерживается то можно так -> https://codepen.io/Mr_Sergo/pe... itors=0012


Javascript
1
2
3
4
5
6
7
8
9
10
var arr = [],
    min = 1,
    max = 9;
 
for(var i = 1; i <= max; i++) arr.push(i);
 
arr.splice(arr.indexOf(Math.floor(Math.random() * (max + 1 - min) + min)),1);
arr.sort(function() { return Math.random() - 0.5});
 
console.log(arr);
А если не поддерживается то так -> https://codepen.io/Mr_Sergo/pe... itors=0012


Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var arr = [],
    min = 1,
    max = 9;
 
for(var i = 1; i <= max; i++) arr.push(i);
 
arr.splice(arr.indexOf(Math.floor(Math.random() * (max + 1 - min) + min)),1);
 
var cur = arr.length, val, randI;
while (--cur) {
    randI = Math.floor(Math.random() * cur);
    val = arr[cur];
    arr[cur] = arr[randI];
    arr[randI] = val;
}
 
console.log(arr);
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
28.08.2019, 13:46  [ТС] 6
Как уже сказал движок в принципе не поддерживает стандарт ECMA-262. Возможно что и другие стандарты тоже.
Поддерживается PIXI4
Вот библиотеки движка если это конечно что нибудь даст вам
libs.zip
Мне нужно получить именно рандомно числа от и до без повтарений
Вот так примерно коркас функции выглядеть должен.
Javascript
1
2
3
4
static getRandomArrayInRange(LengthArray, min, max){
var Arr = new Array(LengthArray);
//Код реализации
}
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
28.08.2019, 14:01  [ТС] 7
Длинна массива не связана с интервалом. Точнее бывают ситуации когда нужно заполнить все ячейки кроме одной элекментами. Напритмер для битвы с босом.
У нас есть 6 горизонтальных ячеек.
Так вот. У нас есть 5 пуль которые помещаются на 5 из 6 рандомных ячеек.
Вот и хочу добавить в плагин функцию которая будет возвращать массив с рандомными числами без повтарений.
Затем Уже в самом движке цикл по массиву где лежат рандомные числы и растановка пуль по этим значениям в массиве.
В принципе можно сделать функцию прям в плагине которая будет растовлять элементы в нужных точках
Конечноже числа не должны повторатся и вылазить за пределы заданных.
0
Эксперт JS
2034 / 1093 / 408
Регистрация: 29.04.2016
Сообщений: 2,612
28.08.2019, 18:28 8
Alexandr_7, Вы вообще хоть пробовали те варианты что вам предоставили?
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
28.08.2019, 18:31  [ТС] 9
Цитата Сообщение от Mr_Sergo Посмотреть сообщение
Alexandr_7, Вы вообще хоть пробовали те варианты что вам предоставили?
Вариант то что самый первый приводит к зависанию.
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
28.08.2019, 21:20  [ТС] 10
Цитата Сообщение от Mr_Sergo Посмотреть сообщение
Если метод sort у вас поддерживается то можно так -> https://codepen.io/Mr_Sergo/pe... itors=0012
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static getRandomInRange(min, max)
    {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    
    static getRandomArrayInRange(LengthArray, min, max)
    {
        var arr = new Array(LengthArray);
        
        for(var i = min; i <= max; i++) arr.push(i);
        
        arr.splice(arr.indexOf(Math.floor(Math.random() * (max + 1 - min) + min)),1);
        arr.sort(function() { return Math.random() - 0.5});
        
        return arr;
    }
Получить массив указанной длины с рандомными числами от и до без повторений

Плагин работает. Но это не то что нужно.
0
46 / 20 / 5
Регистрация: 29.12.2015
Сообщений: 1,814
28.08.2019, 21:27  [ТС] 11
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static getRandomInRange(min, max)
    {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    
    static getRandomArrayInRange(min, max)
    {
        var arr = [];
        
        for(var i = min; i <= max; i++) arr.push(i);
        
        arr.splice(arr.indexOf(Math.floor(Math.random() * (max + 1 - min) + min)),1);
        arr.sort(function() { return Math.random() - 0.5});
        
        return arr;
    }
А понял как работает. Но это только для одного решения.
Вообще ладно другое решение.
Как сделать заполнение массива рандомными числами и с заданным размером. Если стоит true то числа могут повторятся. Если false то нет.
А функция что выше я оставлю. Правдо ее нужно переименовать. Пока не знаю какое ей правильнее имя дать.
0
28.08.2019, 21:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2019, 21:27
Помогаю со студенческими работами здесь

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

Как заполнить массив из 4 чисел числами от 1 до 4 без повторений
Как мне заполнить массив при помощи рандома? Чтобы на выходе у меня были комбинации примерно...

Заполнить массив пятью различными числами без повторений
randomize; for i:= 1 to 5 do B:=random(11)+1; ...

Заполнить одномерный массив случайными числами целого типа в диапазоне от 1 до N без повторений
Помогите пожалуйста. Есть процедура или функция, при помощью которой можно заполнить одномерный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru