Perfeito!
Eu menciono no final do post que o map sempre retorna uma array, e caso vc não precisa de uma, o map não é a melhor ferramenta.
No exemplo dos consoles que tu deu, costumo usar o forEach, acho mais prático que o for tradicional.
"...vale lembrar que ao retornar o mesmo objeto, uma alteração neste causa uma mudança em todos os arrays."
Isso daqui eu não sabia, eu achava que o map retornava ou array completamente novo.
Achei a solução de retornar um spread operator do objeto ótima, já que ela cria outro objeto para retornar, em vez de retornar exatamente o que recebeu.
É por isso que esse problema não acontece com objetos alterados no map. Fiz um teste com posição 2, 'kuririn'. Pq assim cai no if
e retorna um novo objeto que construí ali dentro:
const characters = [
{ name: 'Goku', race: 'saiyajin' },
{ name: 'Cell', race: 'android' },
{ name: 'Kuririn', race: 'terráqueo' },
{ name: 'Bulma', race: 'terráqueo' },
{ name: 'Vegeta', race: 'saiyajin' },
{ name: 'Mestre Kame', race: 'terráqueo' },
{ name: 'Kami-Sama', race: 'namekuseijin' }
];
const mapeado = characters.map(character => {
if (character.race === 'terráqueo')
return {
name: character.name.toUpperCase(),
race: character.race
};
return character;
});
// nome "kuririn" foi alterado para 'KURIRIN'
console.log(mapeado[2]); // { name: 'KURIRIN', race: 'terráqueo' }
// muda o nome no array original para 'GOKU'
characters[2].name = 'GOKU';
// a alteração não se reflete no outro array
console.log(mapeado[2]); // { name: 'KURIRIN', race: 'terráqueo' }
Obrigado pelo comentário :D