[英]How can I access iteration index in Ramda.map
我曾經寫過類似的東西
_.map(items, (item, index) => {});
與lodash。 通常我不需要index
但有時它很有用。
我現在要遷移到Ramda:
R.map((item, index) => {}, items);
index
undefined
。 當然,我可以在上限范圍內創建變量index
,並每次在map
主體中對其進行遞增,但是從FP的角度來看,Ramda代表的觀點有點不對。 那么獲取迭代索引是否有任何方法?
查看addIndex
:
通過向其回調函數添加兩個新參數,從現有函數中創建一個新的列表迭代函數:當前索引和整個列表。
例如,這會將Ramda的簡單map函數變成一個更類似於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']
您還可以使用Ramda Adjunct中的R.addIndex
,該引擎在R.addIndex
使用R.addIndex
。
R.map函數與Array.prototype.map非常相似。 它的回調函數有兩個新參數:當前索引和整個列表。
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']
它還提供了reduceIndexed
const initialList = ['f', 'o', 'o', 'b', 'a', 'r'];
reduceIndexed((acc, val, idx, list) => acc + '-' + val + idx, '', initialList);
//=> "-f0-o1-o2-b3-a4-r5"
作為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
)相比,順序是相反的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.