How can I access iteration index in Ramda.map
Solution 1
Check out addIndex
:
Creates a new list iteration function from an existing one by adding two new parameters to its callback function: the current index, and the entire list.
This would turn, for instance, Ramda's simple map function into one that more closely resembles Array.prototype.map. Note that this will only work for functions in which the iteration callback function is the first parameter, and where the list is the last parameter. (This latter might be unimportant if the list parameter is not used.)
Example from the docs:
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']
Solution 2
You can also use mapIndexed from Ramda Adjunct which uses R.addIndex
under the hood.
R.map function that more closely resembles Array.prototype.map. It takes two new parameters to its callback function: the current index, and the entire list.
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']
It also offsers a reduceIndexed
const initialList = ['f', 'o', 'o', 'b', 'a', 'r'];
reduceIndexed((acc, val, idx, list) => acc + '-' + val + idx, '', initialList);
//=> "-f0-o1-o2-b3-a4-r5"
Comments
-
Glen Swift almost 2 years
I used to write something like
_.map(items, (item, index) => {});
with lodash. Usually I don't need
index
but sometimes it's useful.I'm migrating to Ramda now:
R.map((item, index) => {}, items);
index
isundefined
. Sure, I can create variableindex
in upper scope and increment it every time inmap
body but it's kinda wrong from FP point of view that Ramda stands for. So is there's any build in way of getting iteration index?