Ok, w takim razie potrzebujesz raczej metody .splice()
, która wycina z tablicy dowolne elementy. Pętla for
też tu bardziej przeszkadza niż pomaga, bo musisz przesuwać indeks do przodu tylko wtedy gdy element nie został wycięty, tu masz przykładowe rozwiązanie za pomocą .splice()
i pętli while
(i .push()
do dodawania elementów do tablicy):
let i = 0
while (i < numbers.length) {
if(numbers[i] %2 === 0) {
// Wycinamy fragment tablicy o długości 1 od bieżącego indeksu
// i bieżemy pierwszy element tego wycinka
const num = numbers.splice(i, 1)[0]
// dodajemy element na koniec nowej tablicy
newTable.push(num)
} else {
// inkrementujemy indeks tylko jeśli nie wycieliśmy elementu
i++
}
}
Czytelniejszym rozwiązaniem byłoby zrobienie tego bez modyfikacji oryginalnej tablicy (nie musisz wtedy w ogóle pilnować indeksów):
const original = [2, 5, 7, 10, 34, 16, 879, 1]
const even = original.filter(x => x % 2 === 0)
const odd = original.filter(x => x % 2 !== 0)
Lub żeby nie iterować dwukrotnie (co ma znaczenie przy bardzo dużych tablicach):
const original = [2, 5, 7, 10, 34, 16, 879, 1]
const even = []
const odd = []
original.forEach(x => {
if (x % 2 === 0) {
even.push(x)
} else {
odd.push(x)
}
})
Ogólnie sposobów jest miliord.