Pobawimy się w napisanie funkcji, która przyjmuje n i tworzy listę liczb od n do 2 (malejąco). Zaczynajmy.

Ok, pierwsza próba, czyli w kolejności rosnącej, n to 10:

let arr = Array.from({length: 10-1}, (_, i) => {
    
    return i+2;
});

console.log(arr);
//[ 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

Ok, inne podejście:

let arr3 = Array.from({length: 11-2}, (_, i) => {
    
    return 2 + i;
});

console.log(arr3);
//[ 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

Tu w zasadzie robimy to samo, dokładnie to samo, tylko korzystamy ze wzoru stop – start (dla 10 11 to stop). Generalnie cały wzór wygląda tak:

długość - (stop - start) / krok + 1
wartość - start + indeks * krok

To się sprawdza, jak chcemy móc przemieszczać się co ileś:

const arrayRange = (start, stop, step) =>
    Array.from(
    { length: (stop - start) / step + 1 },
    (value, index) => start + index * step
    );

console.log(arrayRange(2,10,1));
//[ 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

console.log(arrayRange(2,10,2));
//[ 2, 4, 6, 8, 10 ]

Nam się jednak nie sprawdzi, bo my chcemy od tyłu. Od 10 do 2, pomyślmy…

  • Lista od 10 do 2 będzie miała 9 elementów
  • Pierwszy to 10 (np. 10 – 0 daje 10)
  • Drugi to 9 (na przykład 10 – 1 daje 9)…

Ok, taki mam patent:

let arr2 = Array.from({length: 10-1}, (_, i) => {
    return 10-i;
});

console.log(arr2);
//[ 10, 9, 8, 7, 6, 5, 4, 3, 2 ]

Możemy zapisać to do funkcji:

function sieveDesc(num){
    return Array.from({length: num-1}, (_, i) => {
    
        return num-i;
    });
}

console.log(sieveDesc(9));
//[ 9, 8, 7, 6, 5, 4, 3, 2 ]

Przyda się później…