如何使用Ramda的groupBy对二维数组按指定索引分组并保留全部行?
使用Ramda的groupBy按指定索引分组,如何确保包含所有对应行?
问题场景
现有如下二维数组:
[ ['A', 'B', 'C', 'D', 'E'], ['A', 'F', 'C', 'D', 'E'], ['A', 'B', 'C1', 'D1', 'E1'], ['A', 'F', 'C1', 'D1', 'E1'], ]
尝试用Ramda的groupBy按数组第1个索引(row[1])分组时,得到的结果仅包含单一行:
const groupdByRows = R.groupBy((row) => row[1], rows) { B: [[A,B,C,D,E]] F: [[A,F,C,D,E]] }
期望得到包含所有对应行的分组结果:
{ B: [[A,B,C,D,E], [A,B,C1,D1,E1]], F: [[A,F,C,D,E],[A,F,C1,D1,E1]] }
解决方案
Ramda的R.groupBy本身就会将所有匹配分组条件的元素收集到对应组中,你得到错误结果大概率是代码执行时的疏漏(比如变量名拼写错误、rows未正确引用完整数组)。
正确的实现代码如下:
// 定义完整的数据源 const rows = [ ['A', 'B', 'C', 'D', 'E'], ['A', 'F', 'C', 'D', 'E'], ['A', 'B', 'C1', 'D1', 'E1'], ['A', 'F', 'C1', 'D1', 'E1'], ]; // 正确调用groupBy,按row[1]分组 const groupedByRows = R.groupBy(row => row[1], rows);
执行后即可得到期望的结果:
{ B: [['A','B','C','D','E'], ['A','B','C1','D1','E1']], F: [['A','F','C','D','E'], ['A','F','C1','D1','E1']] }
可能的错误原因
- 变量名拼写错误:比如你示例中写的
groupdByRows多了一个字母d,如果后续引用这个错误变量会导致结果异常 rows变量未正确赋值为完整的二维数组,比如只传入了前两行数据- 极端情况下运行环境的Ramda版本存在异常,可尝试升级或重新引入Ramda
内容的提问来源于stack exchange,提问作者Sri
相关产品推荐
相关产品推荐

