Tratando de entender esto:
const _ = {}; _.map = function(list, callback){ var storage = []; for(let i=0; i<list.length; i++){ storage.push(callback(list[i], i, list)); } return storage; } _.map([1,2,3], function(val){return val+1;})¿Por qué la devolución de llamada requiere 3 argumentos, cuando claramente solo necesitamos uno?
_.map = function(list, callback){ var storage = []; for(let i=0; i<list.length; i++){ storage.push(callback(list[i])); //****** This works too! } return storage; } _.map([1,2,3], function(val){return val+1;})Contexto: Haciendo un curso de Frontend Masters, donde lo implementaron como la primera versión.
Un método Array#map puede tener hasta 3 parámetros para su devolución de llamada. mencionado aquí https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
map((element) => { ... }) map((element, index) => { ... }) map((element, index, array) => { ... }) dado que no está utilizando los otros dos index, array no estaría definida.
ejecute el siguiente código para que ambas declaraciones se entiendan mejor.
_.map([1,2,3], function(val,index,arr){ console.log(val) console.log(index) console.log(arr) })Es porque si busca la definición actual de Array.prototype.map , la función de devolución de llamada puede recibir hasta tres argumentos, como puede ver a continuación.
map(function callbackFn(element) { ... }) map(function callbackFn(element, index) { ... }) map(function callbackFn(element, index, array){ ... }) map(function callbackFn(element, index, array) { ... }, thisArg)Además del elemento en el índice dado en la matriz a la que llama la función de mapa, puede recibir el índice y la matriz en sí.
devolución de llamadaFn
Función que se llama para cada elemento de arr. Cada vez que se ejecuta callbackFn, el valor devuelto se agrega a newArray.
La función callbackFn acepta los siguientes argumentos:
elemento
The current element being processed in the array.índice Opcional
The index of the current element being processed in the array.matriz Opcional
The array map was called upon.thisArg Opcional
Valor para usar como este al ejecutar callbackFn.