Javascript 如何使用ramdajs对所有不同的数字进行分组

Javascript 如何使用ramdajs对所有不同的数字进行分组,javascript,ramda.js,Javascript,Ramda.js,假设我有一个数组,其中包含值[1,1,2,2,3,3]。我想把这个数组中的所有不同数字分组,这样我的结果应该是{0:[1,2,3],1:[1,2,3]} 这就是我尝试过的。初始值实际上是从1-99开始的,所以如果I%乘以10,所有的值都会有类似于[0,…,9,0,…,9]的值,然后我不知道下一步该怎么做 const test = compose( groupBy(i => ...), map(i => i % 10), range )(1, 10*10);

假设我有一个数组,其中包含值[1,1,2,2,3,3]。我想把这个数组中的所有不同数字分组,这样我的结果应该是{0:[1,2,3],1:[1,2,3]} 这就是我尝试过的。初始值实际上是从1-99开始的,所以如果I%乘以10,所有的值都会有类似于[0,…,9,0,…,9]的值,然后我不知道下一步该怎么做

const test = compose(
    groupBy(i => ...),
    map(i => i % 10),
    range
  )(1, 10*10);
这对我有用

const test = compose(
    mapObjIndexed((value,key,obj) => value.map((numb,index) => obj[index][key])),
    groupBy(i => i),
    map(i => i % 10),
    range
  )(1, 10*10)

您可以获取一个对象,该对象将目标的索引保持为相同的值

这种方法首先填充第一个数组

var数据=[1,1,2,2,3,3], 索引={}, 结果={}; 数据的let值{ 如果!索引[值]索引[值]=0; 常量索引=索引[值]+; 如果!结果[索引]结果[索引]=[]; 结果[指标].pushvalue; } console.logresult;
.作为控制台包装{max height:100%!important;top:0;}您可以获取一个对象,该对象将目标的索引保持为相同的值

这种方法首先填充第一个数组

var数据=[1,1,2,2,3,3], 索引={}, 结果={}; 数据的let值{ 如果!索引[值]索引[值]=0; 常量索引=索引[值]+; 如果!结果[索引]结果[索引]=[]; 结果[指标].pushvalue; } console.logresult;
.as console wrapper{max height:100%!important;top:0;}假设您的列表已排序,它可以简单到:

这可能是对你手头问题的过分简化,但这个解决方案可能足以让你开始

const group=composetranspose,groupWithequals; 控制台日志组[1,1,2,2,3,3]; //=> [[1,2,3],[1,2,3]]
const{compose,equals,groupWith,transpose}=R 假设您的列表已排序,则可以简单到:

这可能是对你手头问题的过分简化,但这个解决方案可能足以让你开始

const group=composetranspose,groupWithequals; 控制台日志组[1,1,2,2,3,3]; //=> [[1,2,3],[1,2,3]] const{compose,equals,groupWith,transpose}=R 使用转置的想法使这变得非常简单。接下来的两个步骤似乎能让你完全达到目标。。。如果我正确理解这个目标。首先,我们可以用groupByidentity和value替换groupWithequals;这意味着输入是否已排序不再重要。第二,如果您真的想要{0:[1,2,3],1:[1,2,3]}输出而不是更常见的[[1,2,3],[1,2,3]],那么我们可以以toPairs/fromPairs相等地洗牌结束,Object.entries/Object.fromEntries。在普通对象上,这将是不可操作的。但在数组上,它将其转换为具有此类整数键的对象

常数组=管道 群组身份, 价值观 转置 托帕尔斯, 来自巴黎 日志组[1,1,2,2,3,3] 日志组[1,5,1,2,4,2,3,3,1,2,1,3,1,1,1,3,2,1,4] .作为控制台包装{最小高度:100%!重要;顶部:0} const{pipe,groupBy,identity,values,transpose,toPairs,fromPairs}=R使用转置的想法使这变得非常容易。接下来的两个步骤似乎能让你完全达到目标。。。如果我正确理解这个目标。首先,我们可以用groupByidentity和value替换groupWithequals;这意味着输入是否已排序不再重要。第二,如果您真的想要{0:[1,2,3],1:[1,2,3]}输出而不是更常见的[[1,2,3],[1,2,3]],那么我们可以以toPairs/fromPairs相等地洗牌结束,Object.entries/Object.fromEntries。在普通对象上,这将是不可操作的。但在数组上,它将其转换为具有此类整数键的对象

常数组=管道 群组身份, 价值观 转置 托帕尔斯, 来自巴黎 日志组[1,1,2,2,3,3] 日志组[1,5,1,2,4,2,3,3,1,2,1,3,1,1,1,3,2,1,4] .作为控制台包装{最小高度:100%!重要;顶部:0}
const{pipe,groupBy,identity,values,transpose,toPairs,fromPairs}=R谢谢我在ramdajs中应用了你的想法,现在就可以了works@Patrick当前位置我很好奇你是如何将这些想法转化为拉姆达的。这个答案是基于副作用和突变,这两者都不适用于拉姆达。你能分享你的密码吗?谢谢你@Patrick。恐怕我还是不太理解您的需求,也不知道代码是如何映射到这个需求的,但我很高兴您找到了一个您喜欢的答案。谢谢,我将您的想法应用到了ramdajs中,现在就可以了works@Patrick当前位置我很好奇你是如何将这些想法转化为拉姆达的。这个答案是基于副作用和突变,这两者都不适用于拉姆达。你能分享你的密码吗?谢谢你@Patrick。恐怕我还是不太理解你的需求,也不知道代码是如何映射到这个的,但我很高兴你找到了一个你喜欢的答案。转置的使用很好。同意转置。我的回答只是简单地扩展了它,允许未排序的输入,并以奇怪的请求格式返回结果。转置的使用很好。同意转置。我的回答只是将其扩展到允许
取消排序输入并以奇怪的请求格式返回结果。groupByidentity取消排序列表要求是一个不错的选择。很好。Ramda真的需要一个执行groupByfoo的函数,后跟值。我一直想这么做,但似乎从来没有抽出时间去做。不要责怪你自己;我从来没有完成过这个公关-我真的应该完成它!考虑过挑战。啊,这就是为什么我从未放弃它。不是因为我又慢又懒。很高兴听到这个消息!groupByidentity取消排序列表要求是一个很好的选择。很好。Ramda真的需要一个执行groupByfoo的函数,后跟值。我一直想这么做,但似乎从来没有抽出时间去做。不要责怪你自己;我从来没有完成过这个公关-我真的应该完成它!考虑过挑战。啊,这就是为什么我从未放弃它。不是因为我又慢又懒。很高兴听到这个消息!