Ik weet dat er veel van dit soort onderwerpen waren. En ik ken de basis: .forEach()
werkt op de originele array en .map()
op de nieuwe.
In mijn geval:
function practice (i){
return i+1;
};
var a = [ -1, 0, 1, 2, 3, 4, 5 ];
var b = [ 0 ];
var c = [ 0 ];
console.log(a);
b = a.forEach(practice);
console.log("=====");
console.log(a);
console.log(b);
c = a.map(practice);
console.log("=====");
console.log(a);
console.log(c);
En dit is de output:
[ -1, 0, 1, 2, 3, 4, 5 ]
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
undefined
=====
[ -1, 0, 1, 2, 3, 4, 5 ]
[ 0, 1, 2, 3, 4, 5, 6 ]
Ik begrijp niet waarom het gebruik van practice
de waarde van b
verandert in undefined
.
Het spijt me als dit een domme vraag is, maar ik ben vrij nieuw in deze taal en de antwoorden die ik tot nu toe heb gevonden, bevredigen me niet.
Antwoord 1, autoriteit 100%
Ze zijn niet één en hetzelfde. Laat me het verschil uitleggen.
forEach
: dit herhaalt een lijst en past een bewerking met bijwerkingen toe op elk lid van de lijst (bijvoorbeeld: elk lijstitem opslaan in de database) en levert niets op.
map
: dit herhaalt een lijst, transformeert elk lid van die lijst en retourneert een andere lijst van dezelfde grootte met de getransformeerde leden (voorbeeld: de lijst met tekenreeksen transformeren naar hoofdletters). Het muteert de array waarop het wordt aangeroepen niet (hoewel het wel kan als een callback-functie wordt doorgegeven).
Referenties
Array.prototype.forEach() – JavaScript | MDN
Array.prototype.map() – JavaScript | MDN
Antwoord 2, autoriteit 36%
-
Array.forEach
“voert een opgegeven functie één keer uit per array-element.” -
Array.map
“creëert een nieuwe array met de resultaten van het aanroepen van een opgegeven functie op elk element in deze array.”
Dus forEach
retourneert eigenlijk niets. Het roept gewoon de functie voor elk array-element aan en dan is het klaar. Dus wat je ook teruggeeft binnen die aangeroepen functie, wordt gewoon weggegooid.
Aan de andere kant zal map
de functie op dezelfde manier aanroepen voor elk array-element, maar in plaats van de geretourneerde waarde weg te gooien, zal het deze vastleggen en een nieuwe array van die geretourneerde waarden bouwen.
>
Dit betekent ook dat je konmap
overal waar je forEach
gebruikt, maar je moet dat nog steeds niet doen, zodat je het niet doet verzamel de retourwaarden zonder enig doel. Het is gewoon efficiënter om ze niet te verzamelen als je ze niet nodig hebt.
Antwoord 3, autoriteit 18%
forEach() | kaart() | |
---|---|---|
Functionaliteit | Voert een bepaalde bewerking uit op elk element van de array | voert gegeven “transformatie” op een “kopie” van elk element td> tr> |
retourwaarde td> | retourneert undefined td>
| retourneert nieuwe array met getransformeerde elementen, waardoor de oorspronkelijke array ongewijzigd blijft. td> tr> |
Preferable Gebruiksscenario en voorbeeld td> | uitvoeren van niet-tranformatie zoals verwerking op elk element.
Bijvoorbeeld, alle elementen in de database besparen. td> | verkrijgen van de array die de uitvoer van een bepaalde verwerking op elk element van de array wordt uitgevoerd.
Bijvoorbeeld het verkrijgen van reeks lengtes van elke reeks in de array td> Antwoord 4, Autoriteit 10%Het belangrijkste verschil dat u moet weten is Lees: Misschien wilt u ook uitchecken: Antwoord 5, Autoriteit 5%Performance Analyse
Antwoord 6, autoriteit 3%forEach: als u een actie wilt uitvoeren op de elementen van een array en deze is hetzelfde als de for-lus. Het resultaat van deze methode geeft ons geen output buy, maar loop gewoon door de elementen. map: als u een actie wilt uitvoeren op de elementen van een array en ook de uitvoer van uw actie in een array wilt opslaan. Dit is vergelijkbaar met de for-lus binnen een functie die het resultaat na elke iteratie retourneert. Hopelijk helpt dit. Antwoord 7, autoriteit 3%Het verschil zit in wat ze teruggeven. Na uitvoering:
retourneert een array van elementen die het resultaat zijn van de verwerkte functie; terwijl:
retourneert ongedefinieerd. Antwoord 8, autoriteit 2%
Dat is de kern van het verschil. De meeste andere antwoorden hier zeggen dat effectief, maar op een veel ingewikkelder manier. Antwoord 9Verschil tussen Forreach & kaart : Map(): als u map gebruikt, kan map een nieuwe array retourneren door de hoofdarray te herhalen. Foreach(): als je Foreach gebruikt, kan het niets teruggeven voor elke can itererende hoofdarray. useFul link: gebruik deze link om het verschil te begrijpen https://codeburst.io/javascript-map-vs-foreach-f38111822c0f Antwoord 10forEach(): retourwaarde: undefined originalArray : niet gewijzigdna de methodeaanroep newArray wordt niet gemaakt na het einde van de methodeaanroep. kaart(): retourwaarde: nieuwe array gevuld met de resultaten van het aanroepen van een opgegeven functie op elk element in de aanroepende array originalArray : niet gewijzigdna de methodeaanroep newArray wordt gemaakt na het einde van de methodeaanroep.
Antwoord 11Een ding om op te wijzen is dat foreach niet-geïnitialiseerde waarden overslaat, terwijl de kaart dat niet doet.
Antwoord 12
forEach()loop gewoon door de elementen. Het gooit retourwaarden weg en retourneert altijd ongedefinieerd. Het resultaat van deze methode geeft ons geen uitvoer . map()loop door de elementen wijst geheugen toe en slaat retourwaarden op door de hoofdarray te herhalen Voorbeeld:
Antwoord 13Kaart keert impliciet terug, terwijl forEach niet. Dit is de reden waarom je bij het coderen van een JSX-applicatie bijna altijd kaart gebruikt in plaats van voor elk om inhoud in React weer te geven. Antwoord 14.map en .forEach zullen ongeveer hetzelfde doen, totdat je begint te werken met arrays met miljoenen elementen. .map zal een andere verzameling maken met dezelfde grootte (en mogelijk type, afhankelijk van de soort array) die VEEL geheugen zou kunnen gebruiken. .forEach zal dit niet doen. Other episodes |