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…