Empecé a aprender Javascript desde hace una semana y trato de practicar un poco sobre el ciclo, así que trato de hacer una función que cada vez que la llamo, duplico los números en una matriz.
Me las arreglé para hacerlo con el bucle clásico "for" como este como ejemplo:
var numbers = [2, 5, 37, 500, 75]; function getDoubled() { for (var i = 0; i < numbers.length; i++) { (numbers[i] = numbers[i] * 2); } } Así que aquí los números en mi matriz se duplicaron cada vez que llamo a la función getDoubled(); y ahora trato de hacer lo mismo con el método forEach .
var numbers = [2, 5, 37, 500, 75]; function getDoubled(array) { array.forEach(function(number) { (number = number * 2); }) } Pero no pude cambiar la matriz cuando llamé a la función getDoubled(numbers) , sin embargo, si pruebo con console.log(number*2) , funcionó en la consola, así que no pude resolverlo. el error.
La reasignación de un identificador no tiene efectos secundarios. Es decir, hacer someVariable = somethingNew solo dará como resultado un cambio perceptible en la forma en que se ejecuta su secuencia de comandos si algo más hace referencia a someVariable que tiene el nuevo valor. Aquí, el number = number * 2 no hace nada porque nada hace referencia a la variable de number duplicado; reasignar el parámetro no le hace nada a la matriz.
La forma de hacer esto con forEach sería reasignar el índice en la matriz, al igual que en el bucle for .
var numbers = [2,5,37,500,75]; function getDoubled(array) { array.forEach(function(number, i){ array[i] = number * 2; }) } getDoubled(numbers); console.log(numbers); Alternativamente, un mejor enfoque sería construir una nueva matriz con los valores modificados, lo que se puede hacer con .map , que crea una nueva matriz realizando una devolución de llamada en cada elemento de la matriz original; de esa manera, no tiene que hacerlo. mire los índices (sin importancia) para obtener el resultado que desea.
var numbers = [2,5,37,500,75]; function getDoubled(array) { return array.map(num => num * 2); } console.log(getDoubled(numbers));