JavaScript: Jak wypełnić tablicę danymi?

Opublikowano: 19.11.2022 - tagi: JavaScript Tablica

Inicjacja tablicy

Potrzebujesz stworzyć tablicę wypełnioną danymi? Można to zrobić na kilka sposobów:

Sposób 1: Metoda fill

Klasa Array udostępnia nam metodę fill:

const n = 5;
const array = Array(n).fill(0);
console.log(array); // [0, 0, 0, 0, 0]

Możemy też stworzyć tablicę obiektów:

const n = 3;
const array = Array(n).fill({ value: 0 });
console.log(array); // [{ value: 0 }, { value: 0 }, { value: 0 }]

Tylko tutaj mamy mały problem:

array[1].value = 7;
console.log(array); // [{ value: 7 }, { value: 7 }, { value: 7 }]

Została zmieniona wartość drugiego elementu, ale jak widać druga linijka, pokazuje nam, że zmieniła się wartość dla wszystkich elementów tablicy!

Dlaczego tak się dzieje? Metoda fill tworzy jedną instancję obiektu i wypełnia nią tablicę n-razy.

Sposób 2: Metoda from

Powyższy problem możemy rozwiązać za pomocą metody from również z klasy Array:

const n = 3;
const array = Array.from(Array(n), () => ({ value: 0 }));
console.log(array); // [{ value: 0 }, { value: 0 }, { value: 0 }]

array[1].value = 7;

console.log(array); // [{ value: 0 }, { value: 7 }, { value: 0 }]

Sposób 3: Metoda map

Ale nie tak:

const n = 3;
const array = Array(n).map(() => ({ value: 0 }));
console.log(array); // [3 empty slots]

Hmm nie to chcieliśmy osiągnąć. Pusta tablica?!

Zapis:

Array(n)

Tworzy pustą tablicę. Druga rzecz to metoda map nie iteruje po pustej tablicy.

Ten problem możemy rozwiązać za pomocą operatora spread:

[...Array(3)] // [undefined, undefined, undefined]

Taki zapis stworzy tablicę wypełnioną n-razy za pomocą undefined

Ostateczny przykład:

const n = 3;
const array = [...Array(n)].map(() => ({ value: 0 }));
console.log(array); // [{ value: 0 }, { value: 0 }, { value: 0 }]

array[1].value = 7;

console.log(array); // [{ value: 0 }, { value: 7 }, { value: 0 }]