Ich bin ziemlich verwirrt durch das Verhalten von map().Warum ändert eine js-Map in einem Array das ursprüngliche Array?
Ich habe ein Array von Objekten wie folgt aus:
const products = [{
...,
'productType' = 'premium',
...
}, ...]
und ich bin vorbei dieses Array an eine Funktion, die die gleiche Array zurückgeben sollte, aber mit allen Produkt frei gemacht:
[{
...,
'productType' = 'free',
...
}, ...]
die Funktion ist:
const freeProduct = function(products){
return products.map(x => x.productType = "free")
}
welches die folgenden Array zurück:
["free", "free", ...]
So schrieb ich meine Funktion zu sein:
const freeProduct = function(products){
return products.map(x => {x.productType = "free"; return x})
}
, die das Array zurückgibt, wie beabsichtigt.
ABER! Und das ist der Moment, in dem ich meine Gedanken verliere, in beiden Fällen ist mein ursprüngliches Produkt-Array modifiziert.
Dokumentation rund um Karte() sagt, dass es nicht sollte (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map).
Ich habe sogar versucht, einen Klon von meinem Array dreht meine Funktion wie diese
const freeProduct = function(products){
p = products.splice()
return p.map(x => {x.productType = "free"; return x})
}
Aber ich bekomme immer noch das gleiche Ergebnis (die mich verrückt zu machen beginnt) zu erstellen.
Ich wäre jedem sehr dankbar, der mir erklären kann, was ich falsch mache!
Vielen Dank
Hallo. Was bedeutet "=>" im obigen Code? –
@HarshaKanchina Das ist die Fettpfeil-Funktionssyntax, die in ES6 hinzugefügt wird. [Hier] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions#Arrow_functions) gibt einige Infos dazu auf MDN. – SimpleJ
Javascript gibt vor, eine funktionale Sprache zu sein, aber genau wie das Klassen-Schlüsselwort ist dies verwirrend, unintuitiv und verschwendet viel Zeit. 'Sie ändern Ihr ursprüngliches Array nicht. Du modifizierst die Objekte im Array - obwohl diese Antwort korrekt ist, ist es unlogisch, weil du in der realen Welt Teile von etwas nicht ändern kannst und es so bleiben lässt. – Cobolt