如何用Ramda JS按索引数组将数组拆分为字典形式子数组?
在Ramda中按索引数组分组为字典子数组
给定示例输入:
const arr = ["A", "B", "C", "D", "E"]; const indices = [0, 0, 1, 0, 3];
期望输出:
{ "0": ["A", "B", "D"], "1": ["C"], "3": ["E"] }
Ramda可以通过组合几个核心函数优雅实现这个需求,代码如下:
const splitByIndices = R.pipe( R.zip, R.groupBy(R.head), R.map(R.pluck(1)) ); // 调用方式 splitByIndices(indices, arr); // 得到目标结果
分步解释:
R.zip(indices, arr):将索引数组和原数组的对应元素配对,生成二维数组[[0, 'A'], [0, 'B'], [1, 'C'], [0, 'D'], [3, 'E']]R.groupBy(R.head):以每个配对的第一个元素(索引值)为键,将相同索引的配对分组,得到{0: [[0,'A'], [0,'B'], [0,'D']], 1: [[1,'C']], 3: [[3,'E']]}R.map(R.pluck(1)):遍历分组后的对象,提取每个组内配对的第二个元素(原数组的元素),最终生成目标字典结构
由于Ramda函数默认支持柯里化,也可以分两次传参调用:
splitByIndices(indices)(arr); // 同样得到目标结果
内容的提问来源于stack exchange,提问作者Adam B.
相关产品推荐
相关产品推荐

