Questo è il normale comportamento di JavaScript riguardo la gestione degli oggetti, rispetto ai valori di tipo primitivo.ma non ho capito come mai avevo quel problema all'inizio..
Qualsiasi oggetto (compresi gli array) viene istanziato per "riferimento". Questo significa che variabili diverse possono puntare allo stesso oggetto.
Quando modifichi delle proprietà di un oggetto (compresi gli elementi di un array), ogni variabile che punta a quello stesso oggetto mostrerà giustamente l'oggetto modificato.
Nel caso ti serva mantenere inalterato l'array originale (o un qualsiasi oggetto), dovrai crearne un clone; fai qualche ricerca del tipo "javascript clone array".
Esistono diversi modi per clonare un array; uno è appunto il metodo map() che di fatto restituisce un nuovo array mantenendo inalterato quello originale.
In alcuni casi c'è da valutare se si vuole ottenere una "copia superficiale" oppure una "copia profonda". Infatti un array può contenere sia valori primitivi sia altri oggetti (e questi stessi potrebbero contenere a loro volta altri oggetti ancora). In tal caso vale sempre il concetto iniziale di "riferimento" per cui, se si vuole creare un perfetto clone di tale array (compresi tutti i possibili oggetti annidati) è necessario iterare tutti questi oggetti in maniera profonda, per clonare ciascuno di essi.
Chiaramente nel tuo caso, dato che l'array contiene solo valori primitivi, ti basta creare una copia superficiale.