En la 4ª línea utiliza el 2º parámetro de la función llamada map. Pero no hay nada sobre lo que realmente hace la transformación (elemento). Tal vez me estoy perdiendo algo o hace referencia a otra función. Este ejemplo está en el quinto capítulo de la tercera edición del libro EloquentJavaScript.
function map(array, transform) { let mapped = []; for (let element of array) { mapped.push(transform(element)); } return mapped; } let rtlScripts = SCRIPTS.filter(s => s.direction == "rtl"); console.log(map(rtlScripts, s => s.name)); // → ["Adlam", "Arabic", "Imperial Aramaic", …]transform es una función que se pasa a la función map como argumento. Para cada objeto filtrado de la matriz, se llama a la transform , y se devuelve el valor del nombre de ese objeto, y eso se inserta en una matriz (que se devuelve desde el map una vez que se completa la iteración).
La sintaxis de la función de flecha puede ser un poco confusa, así que aquí está el mismo código usando una declaración de función. Nota: en este punto no lo está llamando, lo está pasando como una referencia para que pueda llamarse más tarde (en el map ).
// Pass in the array of filtered objects, and the callback function // which returns the name value of the obj in the current loop iteration const out = map(rtlScripts, function (obj) { return obj.name; });En este ejemplo, reemplacé "elemento" con "obj" para que sea más fácil comprender qué estructuras de datos se están manipulando.
function map(array, transform) { let mapped = []; // For each object in the array call the // transform function which returns only the name value // and add that to the array for (let obj of array) { mapped.push(transform(obj)); } return mapped; } const SCRIPTS = [{name: 'English',direction:'ltr'},{name:'Adlam',direction:'rtl'},{name: 'French',direction:'ltr'},{name:'Arabic',direction:'rtl'},{name:'Imperial Aramaic',direction:'rtl'}]; // `filter` out all the objects that are "rtl" const rtlScripts = SCRIPTS.filter(obj => obj.direction == "rtl"); // Pass in the filtered array of objects, and for // each of them call the function which returns only the name const out = map(rtlScripts, function (obj) { return obj.name; }); console.log(out); // → ["Adlam", "Arabic", "Imperial Aramaic", …]