Esto debería ser algo simple, pero extraño por qué este código genera 'indefinido', mientras que espero obtener una matriz con números: [1, 2]. Traté de depurarlo en la consola paso a paso, pero aún no entiendo por qué newArr no regresa de la función. ¿Podría alguien explicar, por favor?
function filterList(arr) { let newArr = [] for(let i = 0; i <= arr.length; i++) { if (typeof arr[i] !== "number") { return } if (typeof arr[i] === 'number') { newArr.push(arr[i]) } } return newArr } console.log(filterList([1,2,'a','b']))El primer return que se alcance dentro de una función finalizará la llamada a la función y devolverá lo que establezca allí.
En su caso, está presionando 2 valores en la matriz, pero tan pronto como llegue al tercero a solo está usando return . Esto significa que está devolviendo undefined . Debes devolver newArr
function filterList(arr) { let newArr = [] for(let i = 0; i <= arr.length; i++) { if (typeof arr[i] !== "number") { return newArr } if (typeof arr[i] === 'number') { newArr.push(arr[i]) } } return newArr } console.log(filterList([1,2,'a','b']))eliminar return en bucle for
function filterList(arr) { let newArr = [] for(let i = 0; i < arr.length; i++) { if (typeof arr[i] === 'number') { newArr.push(arr[i]) } } return newArr } const arr = [1,2,'a','b'] console.log(filterList(arr)) // with Array.filter let result1 = arr.filter(ele => typeof ele === 'number') console.log(result1) // with Array.reduce let result2 = arr.reduce((res, ele) => typeof ele === 'number' ? [...res, ele] : res, []) console.log(result2) function stopFunc(isStop = false) { let total = 0 for(let i = 0; i < 10; i++) { total += i if(isStop) return 999 } return total // return 45 } console.log(stopFunc()) console.log(stopFunc(true)) puede verificar la función stopFunc en mi ejemplo, The return statement ends function execution and specifies a value to be returned to the function caller. . en su función:
if (typeof arr[i] !== "number") { return }return omitido, en su lugar se devuelve undefined.
Puede consultar la devolución del documento
Está regresando de la función inmediatamente después de encontrar un elemento que no es un número, y el valor de retorno de la función no está undefined , no es la matriz en la que ha estado ingresando números pacientemente. Simplemente elimine esa declaración por completo.
function filterList(arr) { const newArr = []; for (let i = 0; i <= arr.length; i++) { if (typeof arr[i] === 'number') { newArr.push(arr[i]); } } return newArr; } console.log(filterList([1, 2, 'a', 'b', 3, 4]))