Каким образом массивы через данный цикл сливаются в один

for(let i = 0; i < (arr1.length + arr2.length); i++) {

    if(i < arr1.length) {
    
    arr3.push(arr1[i])
    } else {
     arr3.push(arr2[i - arr1.length])
    }
    
}

console.log(arr3) 

Каков принцип работы данного кода. Никак не могу понять каким образом массивы через данный цикл сливаются в один?


Ответы (1 шт):

Автор решения: Grundy

При объединении известна конечная длина массива: arr1.length + arr2.length

Далее в цикле в результирующий массив добавляются по одному сначала элементы из первого массива:

if(i < arr1.length) { // при этом условии
    arr3.push(arr1[i]) // `i` соответствует индексу элементы в массиве `arr1`
}

затем из второго

else { // в эту ветвь попадаем, когда все элементы из первого массива добавлены в результат
    arr3.push(arr2[i - arr1.length]) // в этом случае чтобы получить индекс элемента из второго массива, нужно из `i` вычесть длину первого массива
}

Если записать это двумя циклами будет намного понятнее:

for(let i = 0; i < arr1.length; i++) {
    arr3.push(arr1[i])
}
for(let i = 0; i < arr2.length; i++) {
    arr3.push(arr2[i])
}
console.log(arr3) 
→ Ссылка