JavaScript: verschil tussen .forEach() en .map()

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 practicede waarde van bverandert 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 forEachretourneert 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 mapde 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 konmapoveral waar je forEachgebruikt, 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

retourwaarde

retourneert undefined

retourneert nieuwe array met getransformeerde elementen, waardoor de oorspronkelijke array ongewijzigd blijft.

Preferable Gebruiksscenario en voorbeeld

uitvoeren van niet-tranformatie zoals verwerking op elk element.

Bijvoorbeeld, alle elementen in de database besparen.

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



Antwoord 4, Autoriteit 10%

Het belangrijkste verschil dat u moet weten is .map()retourneert een nieuwe array terwijl .forEach()niet. Dat is waarom u dat verschil in de uitvoer ziet. .forEach()werkt gewoon op elke waarde in de array.

Lees:

Misschien wilt u ook uitchecken:
Array.prototype.every()– JavaScript | MDN


Antwoord 5, Autoriteit 5%

Performance Analyse
Voor loops presteert sneller dan kaart of foreach als het aantal elementen in een array neemt toe.

let array = [];
for (var i = 0; i < 20000000; i++) {
  array.push(i)
}
console.time('map');
array.map(num => {
  return num * 4;
});
console.timeEnd('map');
console.time('forEach');
array.forEach((num, index) => {
  return array[index] = num * 4;
});
console.timeEnd('forEach');
console.time('for');
for (i = 0; i < array.length; i++) {
  array[i] = array[i] * 2;
}
console.timeEnd('for');

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:

arr.map()

retourneert een array van elementen die het resultaat zijn van de verwerkte functie; terwijl:

arr.forEach()

retourneert ongedefinieerd.


Antwoord 8, autoriteit 2%

mapgeeft een nieuwe array terug.

forEachheeft geen retourwaarde.

Dat is de kern van het verschil. De meeste andere antwoorden hier zeggen dat effectief, maar op een veel ingewikkelder manier.


Antwoord 9

Verschil 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 10

forEach():

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.

Since map builds a new array, using it when you aren't using the
returned array is an anti-pattern; use forEach or for-of instead.

Antwoord 11

Een ding om op te wijzen is dat foreach niet-geïnitialiseerde waarden overslaat, terwijl de kaart dat niet doet.

var arr = [1, , 3];
arr.forEach(function(element) {
    console.log(element);
});
//Expected output: 1 3
console.log(arr.map(element => element));
//Expected output: [1, undefined, 3];

Antwoord 12

Verschil tussen forEach() & kaart()

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:

  var numbers = [2,3,5,7];
   var forEachNum = numbers.forEach(function(number){
      return number
   })
   console.log(forEachNum)
   //output undefined
   var mapNum = numbers.map(function(number){
      return number
   })
   console.log(mapNum)
   //output [2,3,5,7]

map() is sneller dan forEach()


Antwoord 13

Kaart 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