Курсы javascript
Здравствуйте, нужно создать массив, состояший из элементов другого массива, при этом
1)элементы не должны повторяться,
2)их количество должно быть равно количетству элементов в исх. массиве,
3)они д.б. расположены в случайном порядке
Отмечу, что мне нужны не сами элементы исходного массива в конечном массиве, а их порядковые номера, и чтобы именно они были случайны и не повторялись.
Как я делаю:
this.list = [];//Исходный массив, там у меня хранятся значения x1,x2,x3,x4
this.temp=[];//Конечный массив
for (var i = 1; i var rand = Math.floor(Math.random()*this.list.length);
var rrand = this.list.indexOf(this.list[rand]);
this.temp.push(rrand);
this.temp.sort();
>
//Проверка на повторения в конечном массиве
for (var i = this.temp.length; i > 0; i—)
if (this.temp[i] === this.temp[i-1])
this.temp.splice(i, 1);
>
>
В общем говоря, в конечном массиве у меня нет такого же количества элементов, что и в исходном.
Пожалуйста помогите решить эту проблему.
Заполнение массива элементами другого массива
В Dictionaty ключ это число месяца. Каждому числу в месяце хочу присвоить Element . Все возможные варианты присвоения хранятся в Elements . Свойства No и Yes это числа месяца когда обязательно нужно присвоить и когда присваивать нельзя. Задача в том что бы заполнить Month элементами максимально рпвномерно, чтобы между одинаковыми элементами было минимум два других. Количество элементов в Elements около десяти. Количество элементов в Yes и No от нуля до трёх. Всё что получилось у меня жуткая каша из наслоения циклов и проверок, но увы нерабочая от слова совсем. Помогите решить проблему или подскажите верные инструменты для ее решения. Пример входных данных:
Elements.Add(new Element(new[] < 1, 2 >, null)); Elements.Add(new Element(new[] < 17 >, new[] < 10 >)); Elements.Add(new Element(null, null)); Elements.Add(new Element(null, new[] < 11 >));
Отслеживать
28.6k 21 21 золотой знак 59 59 серебряных знаков 141 141 бронзовый знак
задан 3 янв 2020 в 14:24
1 2 2 бронзовых знака
Для начала чётко сформулируйте вопрос. Вы хотите присвоить Element: сначала каждому месяцу, потом пишете «максимально равномерно», при этом не объясняя правило, какие элементы считаются одинаковыми. Входные данные для заполнения вы храните в списке elements и его же хотите присвоить в дни. Вопрос непонятен. Алгоритм непонятен. Опишите задачу более подробно.
3 янв 2020 в 15:02
Итого у вас есть входные данные: int[] no — набор дней, которые заполнять нельзя и int[] yes — набор дней, которые должны быть строго заполнены. Давайте такие данные будут, а не public Element(int[] no, int[] yes) , хорошо? Вам нужно сформировать результат в виде new Dictionary
3 янв 2020 в 15:16
@A K♦ а количество дней узнаю вот так DateTime.DaysInMonth(DateTime.Today.Year, DateTime.Today.Month);
3 янв 2020 в 15:16
@A K♦ в Dictionary ключ день месяца от 1 до 31 значение экземпляр класса Element эти экземпляры я беру из колекции Elements
3 янв 2020 в 15:19
Меня просто убивает вот какой момент: есть какие дни месяца, которые ничем не надо заполнять — ну допустим. Есть дни, которые строго нужно заполнить. Если день может быть строго ЛИБО заполнен, ЛИБО не заполнен — то откуда взялось условие по равномерности заполнения? Что с чем сравнивается? Какие расстояния, какие количества элементов между двумя?? Если же в месяце тридцать дней, а в елемент с десяток дней — будут какие-то пропуски. Что заполняем, как? Какой смысл в заполнении дней месяца теми же самыми данными, что и входной набор данных?
Заполнение массива элементами из другого массива.
Контрольные вопросы к лабораторной работе «Одномерный массив»
- Оператор цикла типа «Для». Форма записи, назначение. Пример использования
- Как организовать тело цикла, состоящее из нескольких операторов.
- Что такое массив. Как объявить целочисленный массив и массив действительных чисел.
- Способы заполнения исходного массива. Для чего осуществляется инициализация массива.
- Нумерация элементов массива. Что такое индекс элемента. Тип. Диапазон изменения. Может ли индекс быть отрицательным числом? Чётным?
- Что происходит, когда индекс элемента выходит за размер массива? Например, объявлен массив intA[25]; А в программе встречается строка printf(“%d”,A[100]);
- Функция random(N); Назначение, Описание работы.
- Функция randomize( ); Назначение, Описание работы.
Контрольные к лабораторной работе «Программа-диалог»
- Назначение директивы #include
- Понятие формата. Виды форматов.
- Управляющие последовательности в Си.
- Функция форматированного вывода в Си. Форма записи, назначение и использование.
- Функция форматированного ввода в Си. Форма записи, назначение и использование. Особенности её работы.
- Функция неформатированного ввода в Си. Форма записи, назначение и использование.
- Функция очистки буфера ввода и ее назначение.
- Назначение функций atoi,atof,atol.
Контрольные вопросы к лабораторной работе «Программа-тест»
- Назначение директивы #define.
- Оператор условия в Си. Формы записи.
- Арифметические и логические операции в Си.
- Дополнительные операции присваивания в Си.
- Особенности использования функций getch(),gets() и scanf() в Си.
- Запишите два способа ввода численной переменной с клавиатуры (используя форматированный и неформатированный ввод).
- Организация группы операторов в Си.
JavaScript | Как добавить массив внутрь другого массива?
Мы хотим добавить новый массив [55, 55] внутрь оригинального массива, чтобы сохранились все элементы. Как это сделать?
В какое место добавить( вставить ) новый массив?
Существует всего 3 варианта куда мы можем запихнуть новый массив:
Рассмотрим все 3 варианта реализации. Нам нужно воспользоваться методом splice() для объектов-прототипов Array .
Как добавить массив в начало другого массива методом splice() ?
Первым параметром мы указываем стартовый индекс, с которого начнётся добавление нового массива. В нашем случае добавлять будем в начало т. е. добавляемый массив станет первым элементом оригинального массива — это индекс 0 . Остальные элементы сдвинутся вправо. Длина оригинального массива увеличится.
Вторым параметром мы указываем сколько элементов оригинального массива мы хотим заменить во время вставки. В нашем случае мы не хотим заменять ни одного элемента оригинального массива, поэтому указываем 0 .
Третьим параметром мы передаём сам новый массив, который станет первым элементом оригинального массива — это [55, 55] .
var massiv = [1, 2, 3, 4] massiv.splice(0, 0, [55, 55])
Теперь наш массив имеет вид:
[[55, 55], 1, 2, 3, 4]

Мы успешно добавили массив в начало другого массива и сохранили все «сдвинутые» элементы.
Как добавить массив в середину другого массива методом splice() ?
Понятие «середина» означает то, что мы пытаемся вставить элемент не последним и не первым. Вставленный массив будет где-то между — по середине.
Например, вставляемый массив [55, 55] мы сделаем третьим элементом оригинального массива.
var massiv = [1, 2, 3, 4] massiv.splice(2, 0, [55, 55])
Теперь наш массив имеет вид:
[1, 2, [55, 55], 3, 4]

Как добавить массив в конец другого массива методом splice() ?
Метод splice() работает таким образом, что если мы укажем в качестве стартового индекса « -1 «, то применится правило, которое закинет наш массив не в конец, а в пред-конец. То есть наш вставляемый массив станет предпоследним элементом. И это не совсем то, что нам нужно.
По этой причине нам нужно вызывать два метода splice() :
- Один из splice() будет третим параметром другого splice()
- Другой из splice() будет методом вызова на оригинальном массиве
Конструкция кода будет выглядеть так:
massiv.splice(-1, 0, . massiv.splice(-1, 1, [55, 55]))
Теперь наш массив имеет вид:
[1, 2, 3, 4, [55, 55]]

Как это работает?
Первая трансформация оригинального массива:
. massiv.splice(-1, 1, [55, 55]))
Эта конструкция изменяет оригинальный массив на [1, 2, 3, [55, 55] ] и возвращает нам удалённые элементы — другой массив [4].
Вторая трансформация оригинального масива:
massiv.splice(-1, 0, . [4]))
Теперь, если мы вызовем метод splice() на массиве [1, 2, 3, [55, 55] ] со стартовой позицией также «-1», и не удалим элементы (создадим сдвиг), и распакуем элементы массива [4] при помощи троеточия (spread), то получим нужный результат
[1, 2, 3, 4, [55, 55]]
Информационные ссылки
Стандарт ECMAScript — Раздел «23.1.3.28 Array.prototype.splice ( start , deleteCount , … items )» — https://tc39.es/ecma262/#sec-array.prototype.splice
Вам также может понравиться

Опубликовано 19.03.2023
JavaScript | Что означает знак доллара?
Знак доллара «$» в JavaScript может использоваться в разных ситуациях. Самое простое — им можно называть имена переменных. Глобальный объект и […]
![]()
Опубликовано 14.04.2021
JavaScript | Русский алфавит | Строчные буквы
Строчные буквы русского алфавита (33 буквы) [«а»,»б»,»в»,»г»,»д»,»е»,»ё»,»ж»,»з»,»и»,»й»,»к»,»л»,»м»,»н»,»о»,»п»,»р»,»с»,»т»,»у»,»ф»,»х»,»ц»,»ч»,»ш»,»щ»,»ъ»,»ы»,»ь»,»э»,»ю»,»я»] Символьные коды строчных букв русского алфавита [1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, […]
![]()
Опубликовано 10.05.2022
Fetch | Как сохранить изображение на клиенте? | JavaScript
У нас есть задача. Мы хотим при помощи браузера, языка JavaScript и прикладных интерфейсов программирования (APIs) скачать изображение на HTML-странице какого-нибудь сайта. […]
![]()
Опубликовано 15.11.2021
Ночные Работники Службы | Кеши
Чтобы позволить авторам полностью управлять своими кэшами содержимого для автономного использования, Window и WorkerGlobalScope предоставляют методы асинхронного кэширования, которые открывают и […]