pourquoi une carte js sur un tableau modifie-t-elle le tableau d'origine?

Je suis tout à fait confondre par le comportement de la carte().

J'ai un tableau d'objets comme ceci :

const products = [{
    ...,
    'productType' = 'premium',
    ...
}, ...]

et je suis de passage ce tableau à une fonction qui renvoie le même tableau, mais avec tous les produit gratuit :

[{
    ...,
    'productType' = 'free',
    ...
}, ...]

La fonction est :

const freeProduct = function(products){
    return products.map(x => x.productType = "free")
}

Qui retourne le tableau suivant :

["free", "free", ...]

Donc j'ai réécrit ma fonction :

const freeProduct = function(products){
    return products.map(x => {x.productType = "free"; return x})
}

Qui retourne un tableau comme prévu.

MAIS ! Et c'est le moment où j'ai perdu mon esprit, dans les deux cas, l'original de mes produits tableau est modifié.

De la Documentation autour de la carte() dit qu'il ne devrait pas ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map ).

J'ai même essayé de créer un clone de mon tableau de tourner ma fonction comme ceci

const freeProduct = function(products){
    p = products.splice()
    return p.map(x => {x.productType = "free"; return x})
}

Mais j'obtiens toujours le même résultat (ce qui commence à me rendre dingue).

Je serais très reconnaissante à toute personne qui peut m'expliquer ce que je fais mal !

Merci

source d'informationauteur Edwin Joassart