Quiero que alguien revise mi código y me diga qué hice mal. Quiero una función que reciba una matriz de números como parámetro y devuelva una nueva matriz con cada elemento multiplicado por dos.
function duplicate(arr) { let numDouble = arr; for (let i = 0; i < arr.length; i++) { if (arr[i] != 0) { Total = numDouble * 2; } } return numDouble; } const arr = [1,2,3,4,5] console.log(duplicate(arr))Su solución no funcionaba porque no estaba asignando el nuevo valor a la matriz
Funcionará si usa el siguiente código para hacer esto:
numDouble[i] = numDouble[i] * 2; Por cierto, no es necesario verificar si el valor es 0 porque 0 * 2 sigue siendo igual a 0, lo que funciona perfectamente. por lo que podría haber eliminado la parte if(arr[i]!=0) .
Además, cuando estés haciendo let numDouble = arr; no está creando una nueva matriz sino asignando la referencia de matriz existente a la variable.
Si desea crear una nueva matriz, puede usar el operador de propagación que se usa, por ejemplo, para duplicar la matriz.
Ejemplo: let numDouble = [...arr];
Habrías comprobado si había alguna división que pudiera causar algún problema
Ejemplo :
function duplicate(arr) { let numDouble = [...arr]; for (let i = 0; i < arr.length; i++) { numDouble[i] = numDouble[i] * 2; } return numDouble; } const arr = [1, 2, 3, 4] const newArr = duplicate(arr) console.log(newArr) Otra solución que podría funcionar mejor es la función de map que toma una función y la aplica a cada elemento de la matriz.
Entonces, por ejemplo, podrías hacer esto:
const arr = [1, 2, 3, 4] const multiplyByTwo = function(number) { return number * 2 } console.log(arr.map(multiplyByTwo))O incluso con una línea de código usando funciones de flecha:
const arr = [1,2,3,4] console.log(arr.map(x => x*2))Hay un par de errores en su código, que se describen a continuación:
let numDouble = arr;
Esto no crea una nueva matriz. En su lugar, crea una nueva referencia a la misma matriz. Esto significa que cuando modificas numDouble también estás modificando arr
if(arr[i]!=0)
No estoy seguro de qué está tratando de hacer con esta condición, pero es innecesario ya que 2 * 0 = 0 de todos modos. ¿A menos que desee excluir el valor 0 de la matriz final?
Total = numDouble * 2;
La variable Total no está definida. También en javascript, la convención es usar camelCase para nombres de variables.
Además numDouble es una matriz aquí, no puede usar el operador de multiplicación. numDouble * 2 se evalúa como NaN
Posible implementación
Una posible implementación para su función sería:
function duplicate(arr) { const doubleNum = [] for (let i = 0; i < arr.length; i++) { doubleNum.push(2 * arr[i]) } return doubleNum } const arr = [1,2,3,4] console.log(duplicate(arr))Aunque en la vida real, simplemente usaríamos el mapa así:
const numDouble = arr.map(i => 2*i)
var a=[2,1,5]; function duplicate(arr){ var Total=[]; for(let i = 0; i < arr.length; i++){ if(arr[i]!=0){ Total.push(arr[i] * 2); } } console.log(Total) return Total; } duplicate(a);puedes usar el método push() . agrega uno o más elementos al final de una matriz