Javascript 数组中大小为N的组合

Javascript 数组中大小为N的组合,javascript,arrays,Javascript,Arrays,我试图构建一个javascript函数,从数组中获取大小为N的所有组合。 假设我得到: const Xarray = ["19", "21","42","23", "25", "28"]; const n = 4; combinationsOfN(Xarray, n) => [ ["19", "21", "42", "23"], ["19", "21", "42", "25"], ["19", "21", "42", "28"], ["19", "21", "23", "

我试图构建一个javascript函数,从数组中获取大小为N的所有组合。 假设我得到:

const Xarray = ["19", "21","42","23",  "25", "28"];
const n = 4;

combinationsOfN(Xarray, n) =>

[ ["19", "21", "42", "23"],
  ["19", "21", "42", "25"],
  ["19", "21", "42", "28"],
  ["19", "21", "23", "25"],
  ["19", "21", "23", "28"],
  ["19", "21", "25", "28"],
…. ]

一个人做这件事可能很难,因为我已经试过了。已经有一个js工具可以帮你做这件事

/**
*版权所有2012 Akseli Palén。
*创建于2012年7月15日。
*根据麻省理工学院许可证授权。
*/
函数k_组合(集合,k){
变量i、j、梳、头、尾梳;

如果(k>set.length | | kI提供两种解决方案,第一种解决方案的结果包括任何位置的项目

函数组合(数组、长度){
函数c(l,r){
变量i,ll;
如果(r.length==长度){
结果:推(r);
返回;
}
对于(i=0;idocument.write(“”+JSON.stringify(组合([“19”、“21”、“42”、“23”、“25”、“28”]、4)、0、4)+“”);
我不得不说我有时讨厌JS。我当然讨厌推送()
这是肯定的。当你做功能时,你需要越来越多的对变异对象的引用。一个方法对它调用的对象进行变异时,会返回对该对象的引用

不管怎么说,代码看起来可能要简单得多,但唉……这就是它所能做到的。它只不过是一个简单的递归运行。看起来复杂的部分实际上是愚蠢的部分,例如

实际上,这意味着删除索引位置i处的元素并返回结果数组。当您需要将此功能用作单个指令或可链接指令作为函数的参数时,这似乎是唯一的方法。就像

指令。这意味着将c推到t数组并返回t数组。愚蠢的推(c)会返回长度…我讨厌它。你给我参考人,如果需要的话,我可以从中获得长度。所以其余的很容易理解

我有两个解,一个是置换解,一个是组合解

var xarray=[“19”、“21”、“42”、“23”、“25”、“28”],
n=4;
函数getPermutations(a,n,s=[],t=[]){
返回a.reduce((p,c,i,a)=>{n>1?getPermutations(a.slice(0,i).concat(a.slice(i+1)),n-1,p,(t.push(c,t))
:p.push((t.push(c),t.slice(0));
t、 pop();
返回p},s)
}

document.write(“+JSON.stringify(getPermutations(xarray,n),null,2)+”);
那么,到目前为止我们做了哪些尝试?只需要迭代
xarray
中的前四个
n
项?您可能需要检查您的组合解决方案(最后一个)。有趣的是……找到了优势。
a.slice(0,i).concat(a.slice(i+1))
(t.push(c),t)