TransWikia.com

Копирование внутри массива

Stack Overflow на русском Asked by Stas Verevkin on August 30, 2021

Всем привет!
Помогите решить задачу плиз

Есть массив let arr = [{id:1, name: ‘Item1’}, {id:2, name: ‘Item2’}];

Необходимо дозаполнять массив элементами с начала списка пока длина массива не станет 20

Всем спасибо за помощь.


По сути необходимо дублировать объекты пока длина массива не станет 20

4 Answers

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP