Javascript 如何访问Ramda.map中的迭代索引

Javascript 如何访问Ramda.map中的迭代索引,javascript,mapping,lodash,ramda.js,Javascript,Mapping,Lodash,Ramda.js,我以前写过这样的东西 _.map(items, (item, index) => {}); 用洛达斯。通常我不需要索引,但有时它很有用 我现在正在迁移到拉姆达: R.map((item, index) => {}, items); 索引是未定义的。当然,我可以在上面的范围中创建变量index,并在mapbody中每次递增它,但从Ramda所代表的FP角度来看,这有点错误。那么,在获取迭代索引的过程中是否存在任何构建 查看: 通过向回调函数添加两个新参数,从现有列表迭代函数创建一个

我以前写过这样的东西

_.map(items, (item, index) => {});
用洛达斯。通常我不需要
索引
,但有时它很有用

我现在正在迁移到拉姆达:

R.map((item, index) => {}, items);
索引
未定义的
。当然,我可以在上面的范围中创建变量
index
,并在
map
body中每次递增它,但从Ramda所代表的FP角度来看,这有点错误。那么,在获取迭代索引的过程中是否存在任何构建

查看:

通过向回调函数添加两个新参数,从现有列表迭代函数创建一个新的列表迭代函数:当前索引和整个列表

例如,这将使Ramda的简单映射函数变得更像Array.prototype.map。请注意,这仅适用于迭代回调函数是第一个参数且列表是最后一个参数的函数。(如果不使用list参数,后者可能不重要。)

文档中的示例:

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']
您还可以在发动机罩下使用which uses
R.addIndex

与Array.prototype.map更相似的R.map函数。它的回调函数需要两个新参数:当前索引和整个列表

它还抵消了


作为
addIndex
的替代方法,您可以在映射之前使用
toPairs
,从:

将对象转换为键、值数组的数组。仅使用对象自身的属性。请注意,输出数组的顺序不能保证在不同的JS平台上保持一致

该文档只讨论对象,但它同样适用于数组。在您的示例中:

R.map(([index, item]) => {}, R.toPairs(items));

// or, equivalent:

R.compose(
    R.map(([index, item]) => {}),
    R.toPairs,
)(items)
请记住,在每个索引/值对中,索引始终是第一个元素,因此与lodash(或本机
Array.prototype.map
)相比,顺序是相反的。

文档中有“请参见”可以帮助您解决此类问题
const initialList = ['f', 'o', 'o', 'b', 'a', 'r'];

reduceIndexed((acc, val, idx, list) => acc + '-' + val + idx, '', initialList);
//=> "-f0-o1-o2-b3-a4-r5"
R.map(([index, item]) => {}, R.toPairs(items));

// or, equivalent:

R.compose(
    R.map(([index, item]) => {}),
    R.toPairs,
)(items)