Копирование внутри массива
Всем привет! Помогите решить задачу плиз
Есть массив let arr = [{id:1, name: 'Item1'}, {id:2, name: 'Item2'}];
Необходимо дозаполнять массив элементами с начала списка пока длина массива не станет 20
Всем спасибо за помощь.
По сути необходимо дублировать объекты пока длина массива не станет 20
Ответы (4 шт):
Через for и 2 счетчика:
let arr = [{id:1, name: 'Item1'}, {id:2, name: 'Item2'}, {id:3, name: 'Item3'}];
let arrs = [];
var m = 0
for(var i=0;i<20;i++){
if(typeof arr[m]!="undefined"){
arrs[i] = arr[m];
m++;
} else {
m=0;
i--;
}
}
arr = arrs; // console.log(arr)
Я бы еще вот так попробовал)
let arr = [{id:1, name: 'Item1'}, {id:2, name: 'Item2'}];
let res = [];
while (res.length < 20){
res.push(...arr);
}
А вот для зацикливания
let arr = [{id:1, name: 'Item1'}, {id:2, name: 'Item2'}];
let res = [];
while (res.length != 20){
for(let a of arr){
if(res.length < 20) {
res.push(a);
}
}
}
Универсально.
ES6
let count = 20;
let arr = [{id:1, name: 'Item1'}, {id:2, name: 'Item2'}, {id:3, name: 'Item3'}];
let fill = Array(...new Array(count)).map((_, i) => arr[i % arr.length]);
console.log(fill);
ES5
var count = 20;
var arr = [{id:1, name: 'Item1'}, {id:2, name: 'Item2'}, {id:3, name: 'Item3'}];
var fill = Array.apply(null, new Array(count)).map(function(_, i) { return arr[i % arr.length] });
console.log(fill);
Обновил как предложил @optimus-prime
let arr = [{id:1, name: 'Item1'}, {id:2, name: 'Item2'}];
arr[0] — это ссылка на объект. Если в каком-нибудь цикле начать дублировать по arr[i], будут копироваться именно ссылки, а не сами объекты (из-за чего теряется весь смысл такого действия). А создание новых объектов с такими же свойствами и значениями, можно организовать так:
let arr = [{id:1, name: 'Item1'}, {id:2, name: 'Item2'}];
arr = new Array(20).fill(0).map(
(e,i) => JSON.parse(JSON.stringify( arr[ i % arr.length ] ))
);
console.log( arr );