javascript - ¿Cómo puedo acceder al índice de iteración en Ramda.map?
mapping lodash (2)
Solía escribir algo como
_.map(items, (item, index) => {});
con lodash. Normalmente no necesito index
pero a veces es útil.
Estoy migrando a Ramda ahora:
R.map((item, index) => {}, items);
index
undefined
está undefined
. Claro, puedo crear un index
variable en el alcance superior e incrementarlo cada vez en el cuerpo del map
, pero es un poco incorrecto desde el punto de vista de PF que Ramda representa. Entonces, ¿hay alguna forma de obtener el índice de iteración?
Echa un vistazo a addIndex
:
Crea una nueva función de iteración de lista a partir de una existente agregando dos nuevos parámetros a su función de devolución de llamada: el índice actual y la lista completa.
Esto convertiría, por ejemplo, la función de mapa simple de Ramda en una que se parece más a Array.prototype.map. Tenga en cuenta que esto solo funcionará para las funciones en las que la función de devolución de llamada de iteración es el primer parámetro, y donde la lista es el último parámetro. (Este último podría no ser importante si no se usa el parámetro de lista).
Ejemplo de la documentación:
var mapIndexed = R.addIndex(R.map);
mapIndexed((val, idx) => idx + ''-'' + val, [''f'', ''o'', ''o'', ''b'', ''a'', ''r'']);
//=> [''0-f'', ''1-o'', ''2-o'', ''3-b'', ''4-a'', ''5-r'']
También puede usar mapIndexed de Ramda Adjunct que usa R.addIndex
debajo del capó.
La función R.map que más se parece a Array.prototype.map. Toma dos nuevos parámetros para su función de devolución de llamada: el índice actual y la lista completa.
RA.mapIndexed((val, idx, list) => idx + ''-'' + val, [''f'', ''o'', ''o'', ''b'', ''a'', ''r'']);
//=> [''0-f'', ''1-o'', ''2-o'', ''3-b'', ''4-a'', ''5-r'']
También ofrece una reduceIndexed
const initialList = [''f'', ''o'', ''o'', ''b'', ''a'', ''r''];
reduceIndexed((acc, val, idx, list) => acc + ''-'' + val + idx, '''', initialList);
//=> "-f0-o1-o2-b3-a4-r5"