javascript mapping lodash ramda.js

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"