La méthode Array.prototype.map
et la méthode Array.prototype.forEach
sont toutes deux assez similaires.
Exécutez le code suivant : http://labs.codecademy.com/bw1/6#:workspace
var arr = [1, 2, 3, 4, 5];
arr.map(function(val, ind, arr){
console.log("arr[" + ind + "]: " + Math.pow(val,2));
});
console.log();
arr.forEach(function(val, ind, arr){
console.log("arr[" + ind + "]: " + Math.pow(val,2));
});
Ils donnent exactement le même résultat.
arr[0]: 1
arr[1]: 4
arr[2]: 9
arr[3]: 16
arr[4]: 25
arr[0]: 1
arr[1]: 4
arr[2]: 9
arr[3]: 16
arr[4]: 25
Mais la différence vient lorsque vous exécutez le code suivant :
Ici, j'ai simplement attribué le résultat de la valeur de retour des méthodes map et forEach.
var arr = [1, 2, 3, 4, 5];
var ar1 = arr.map(function(val, ind, arr){
console.log("arr[" + ind + "]: " + Math.pow(val,2));
return val;
});
console.log();
console.log(ar1);
console.log();
var ar2 = arr.forEach(function(val, ind, arr){
console.log("arr[" + ind + "]: " + Math.pow(val,2));
return val;
});
console.log();
console.log(ar2);
console.log();
Maintenant le résultat est quelque chose de délicat !
arr[0]: 1
arr[1]: 4
arr[2]: 9
arr[3]: 16
arr[4]: 25
[ 1, 2, 3, 4, 5 ]
arr[0]: 1
arr[1]: 4
arr[2]: 9
arr[3]: 16
arr[4]: 25
undefined
Conclusion
La méthode Array.prototype.map
renvoie un tableau mais la méthode Array.prototype.forEach
ne le fait pas. Vous pouvez donc manipuler le tableau renvoyé à l'intérieur de la fonction de rappel passée à la méthode map, puis le renvoyer.
La méthode Array.prototype.forEach
parcourt simplement le tableau donné afin que vous puissiez faire vos manipulations tout en parcourant le tableau.
0 votes
Curieusement, si j'obtiens un
Iterator[String]
depuisscala.io.Source.fromFile("/home/me/file").getLines()
et j'applique.foreach(s => ptintln(s))
dessus, il est bien imprimé mais devient vide juste après. En même temps, si j'applique.map(ptintln(_))
dessus, il devient simplement vide et rien n'est imprimé.