He leído este artículo, pero parece que no entiendo correctamente la sintaxis de reducción de JavaScript. ¿Cómo puedo pasar parámetros adicionales a la función de reducción personalizada?
Función reductora de llamadas.
data = Object.values(data.reduce(reducer, {}));Ejemplo de función reductora.
const reducer = (acc, cur) => { if (somethingIsTrue) { return acc; } };En este momento está funcionando como debería, pero digamos que estoy llamando a la función reductora y quiero pasar una variable simple que contiene "Hola mundo" para que la función no lo vea como un argumento. ¿Cómo puedo conseguir esto?
Puede hacer la composición de funciones para "construir" algo llamado función de orden superior. Básicamente, la idea es crear una función que devuelva una "función secundaria", que tendrá acceso a las variables de la función principal.
// Parent function (getReducer) function getReducer(stringToAppend) { // Child function (reducer) function reducer(acc, curr) { // Child function has access to parent's variables (in this case stringToAppend) acc[curr] = stringToAppend + curr return acc } return reducer } const data = [0,1,2,3,4,5,6,7,8,9] const result = data.reduce(getReducer("Hello World "), {}) console.log('result :>> ', result);En consola:
result :>> { '0': 'Hello World 0', '1': 'Hello World 1', '2': 'Hello World 2', '3': 'Hello World 3', '4': 'Hello World 4', '5': 'Hello World 5', '6': 'Hello World 6', '7': 'Hello World 7', '8': 'Hello World 8', '9': 'Hello World 9' } Usé la sintaxis de la function porque la encontré más detallada y explícita para explicar esto. Por supuesto, podría utilizar funciones de flecha. Usando la sintaxis de flecha, la función podría verse tan simple como:
function getReducer (stringToAppend) { return (acc, curr) => { acc[curr] = stringToAppend + curr return acc } }