javascript - 以下排列的哪个“for”循环?
问题描述
我正在尝试使用 for 循环获取这些排列。
2 个元素 {a,b} 结果:
a, b, ab
3 个元素 {a,b,c} 结果:
a, b, c, ab, ac, bc, abc
4 个元素 {a,b,c,d} 结果:
a, b, c, d, ab, ac, ad, bc, bd, cd, abc, abd, acd, bcd, abcd
5 个元素 {a,b,c,d,e} 结果:
a,b,c,d,e,ab,ac,ad,ae,bc,bd,是,cd,ce,de,abc,abd,abe,acd,ace,ade,bcd,bce,bde,cde, abcd, abce, abde, acde, bcde, abcde
等等。
我在jsfiddle中完成了这项工作,一个接一个地放置for
循环以捕获系统结构:
var a, b, c;
a = ['a', 'b', 'c', 'd', 'e', 'f'];
b = [];
for(i=0; i < a.length; i++){
b[b.length] = a[i];
}
for(i=1; i < a.length; i++){
b[b.length] = b[0]+b[i];
}
for(i=2; i < a.length; i++){
b[b.length] = b[1]+b[i];
}
for(i=3; i < a.length; i++){
b[b.length] = b[2]+b[i];
}
for(i=4; i < a.length; i++){
b[b.length] = b[3]+b[i];
}
for(i=2; i < a.length; i++){
b[b.length] = b[5]+b[i];
}
for(i=3; i < a.length; i++){
b[b.length] = b[6]+b[i];
}
for(i=4; i < a.length; i++){
b[b.length] = b[7]+b[i];
}
for(i=3; i < a.length; i++){
b[b.length] = b[9]+b[i];
}
for(i=4; i < a.length; i++){
b[b.length] = b[10]+b[i];
}
for(i=4; i < a.length; i++){
b[b.length] = b[12]+b[i];
}
for(i=3; i < a.length; i++){
b[b.length] = b[15]+b[i];
}
for(i=4; i < a.length; i++){
b[b.length] = b[16]+b[i];
}
for(i=4; i < a.length; i++){
b[b.length] = b[18]+b[i];
}
for(i=4; i < a.length; i++){
b[b.length] = b[21]+b[i];
}
for(i=4; i < a.length; i++){
b[b.length] = b[25]+b[i];
}
解决方案
试试这个解决方案。
var x = ['a','b','c','d'],
possiblePermutation = [];
x.forEach(function(elmt){
possiblePermutation.push(elmt)
var rest = x.slice( x.indexOf(elmt) + 1);
myPermutationGeneration(elmt,rest)
})
function myPermutationGeneration(current,rest){
rest.forEach( function( restEle ){
possiblePermutation.push( current + restEle )
var rest2 = x.slice( x.indexOf(restEle) + 1);
myPermutationGeneration( current + restEle, rest2)
})
}
console.log( possiblePermutation )
推荐阅读
- ios - 命中测试以确定哪个 CGPoint 最接近触摸 - 1 个 UIView 中的 16 个 CGPoint 点
- android - 如何通过向我的服务器发送值来获得结果
- twitter-bootstrap - Bootstrap 4卡行?
- powershell - Powershell作为导入模块的计划任务问题,似乎
- javascript - Laravel - 带有过滤器和旧输入的搜索表单
- install4j - install4j 6.1.6 安装程序远程调试
- css - SASS 新手 - 不编译
- c - C malloc,重新分配。如何从数组中删除单个元素。
- woocommerce - WooCommerce 在自定义字段的开头添加标题
- networking - OpenShift 路由可从 PAAS 外部访问,但不能从 PAAS 内部的客户端访问