Необходимо увеличить длину массива, дублируя элементы, до тех пор, пока его длина не станет требуемой.
Например, от 4 до 10 элементов:
[a
, b
, c
, d
] => [a, a, a
, b, b, b
, c, c
, d, d
]
Или такой пример: от 2 до 8 элементов:
[a
, b
] => [a, a, a, a
, b, b, b, b
]
Моя попытка - от 4 до 8:
a = [2, 3, 1, 4];
b = [];
for(var i = 0; i< a.length;++i){
b.push(a[i]);
b.push(a[i]);
}
a = b;
console.log(a);
Длину нового массива делим на длину исходного. Округляем в меньшую сторону - это будет количество повторений элемента в новом массиве. Если после деления есть остаток, то по единичке повторений разбрасываем на каждый элемент, пока остаток не иссякнет.
Пример реализации, в котором комментариев и "украшательств" больше, чем кода по вопросу:
// Растянуть массив.
function stretchArray(arr, limit) {
if (!arr.length || limit < arr.length) {
throw new Error('Не удалось растянуть массив.');
}
// Целое число, на которое будет размножен каждый элемент.
const integer = Math.floor(limit / arr.length);
// a % b - остаток от деления.
// По единичке будем накидывать на каждый элемент.
// Кому досталось, тому досталось, как `крошки` со стола.
let crumbs = limit % arr.length;
const newArr = Array.from(arr, function(item, index) {
// Сколько раз нужно размножить элемент массива.
const repeater = integer + (crumbs > 0 ? 1 : 0);
// Уменьшаем количество `крошек`.
crumbs--;
// Размножаем элемент массива и возвращаем.
return Array(repeater).fill(item);
});
// [[1, 1], [2, 2]] => [1, 1, 2, 2]
return [].concat(...newArr);
// Можно с помощью `flat`:
// return newArr.flat();
}
// Исходные данные для примера.
const first = ['a', 'b'];
const second = ['a', 'b', 'c'];
const third = ['a', 'b', 'c', 'd'];
const fourth = [2, 3, 1, 4];
// Распечатаем результаты.
const print = (data) => JSON.stringify(data, null, 2);
pre_first.textContent = print(stretchArray(first, 6));
pre_second.textContent = print(stretchArray(second, 8));
pre_third.textContent = print(stretchArray(third, 10));
pre_fourth.textContent = print(stretchArray(fourth, 23));
pre {
display: inline-block;
white-space: nowrap;
color: #6610f2;
background: #eee;
border: 1px solid #ccc;
border-radius: 2px;
padding: 8px 12px;
}
<h4>6: ['a', 'b']</h4>
<pre id="pre_first"></pre>
<h4>8: ['a', 'b', 'c']</h4>
<pre id="pre_second"></pre>
<h4>10: ['a', 'b', 'c', 'd']</h4>
<pre id="pre_third"></pre>
<h4>23: [2, 3, 1, 4]</h4>
<pre id="pre_fourth"></pre>
Могу накидать решение на Java) Интерпретируйте в JS. Я думаю суть будет понятна Вам.
public class DynaArray {
private int[] array;
private int size;
public DynaArray() {
array = new int[10];
}
public void add(int element) {
if (size == array.length) {
int[] temp = array;
array = new int[temp.length * 2];
for (int i = 0; i < temp.length; i++) {
array[i] = temp[i];
}
}
array[size++] = element;
}
В строке array = new int[temp.length * 2];
можно указать, на сколько увеличить массив при переполнении.
var arr = ["a", "b"];
const increase = (arr, length) => {
let count = 0;
let obj = {};
const func = (arr, obj, length) => {
arr.forEach(i => {
arr.forEach(j => {
if (i == j) {
count++;
}
});
obj[i] = count;
count = 0;
});
for (let i = 0; i < arr.length; i++) {
let min = Math.min(...Object.values(obj));
for (let value in obj) {
if (arr.length != length) {
if (obj[value] == min) {
arr.push(value)
obj[value] = min + 1;
i = 0;
}
} else {
break;
}
}
}
arr.sort();
return arr;
}
return func(arr, obj, length)
}
console.log(increase(arr, 5));
Как-то так
Виртуальный выделенный сервер (VDS) становится отличным выбором
Смотрю через инстепктор в браузере где лежит нужный файл стилей, подключаюсь по FTP, вношу правки в файл со стилями, сохраняю изменения, записываю...
Собственно в этом вопрос, до неприличия простой, но в гугле не нашел ответаКомпилируя в qtcreator'e заметил, что для шаблонных классов нет соответствующих
Есть окно, которое выводит конвертированную переменную int в строку, и все это повторяется в цикле (Должно быть 10 строк одной под другой)Код...