Stack Overflow на русском Asked by Stas Verevkin on August 30, 2021
Всем привет!
Помогите решить задачу плиз
Есть массив let arr = [{id:1, name: ‘Item1’}, {id:2, name: ‘Item2’}];
Необходимо дозаполнять массив элементами с начала списка пока длина массива не станет 20
Всем спасибо за помощь.
По сути необходимо дублировать объекты пока длина массива не станет 20
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 );
Answered by OPTIMUS PRIME on August 30, 2021
Универсально.
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
Answered by renich on August 30, 2021
Я бы еще вот так попробовал)
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);
}
}
}
Answered by dmitriy_vlz on August 30, 2021
Через 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)
Answered by Alexander on August 30, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP