js两个数组排列组合

var a = ["A","B"], b = ["1","2"];
//要求,排列组合结果为:A1,A2,A12,B1,B2,B12,AB1,AB2,AB12
//两个数组还可以增加元素,以此类推
这种排列组合,要怎么写啊?求高人指教!!!

<html>
<head>
    <title>js两个数组排列组合</title>
    <script type="text/javascript">
    var a = ["A","B","C"];
    var b = ["1", "2","3"];
    window.onload = function () {
        var a1 = new objPL(a);//计算数组a的排列组合
        var b1 = new objPL(b);//计算数组b的排列组合
        var str = "";
        var n = 0;
        //a1和b1的排列组合个数就是两者相乘(双层循环)
        for (var i = 0; i < a1.length; i++) {
            for (var j = 0; j < b1.length; j++) {
                str += a1[i] + b1[j] + " ";
                n++;
            }
            str += "<br/>";
        }
        document.write("共" + n + "个<br/>");
        document.write(str);
    }
    //取数组的排列组合
    function objPL(arr) {
        this.a = arr;
        this.r = [];
        this.n = 0;
        //从M个数里面取N个(递归)
        this.mGetN = function (curIndex, num, curSelect) {
            if (num == 0) {
                this.r[this.n++] = curSelect; return;
            }
            if (this.a.length - curIndex < num) return;
            this.mGetN(curIndex + 1, num - 1, curSelect + this.a[curIndex]);
            this.mGetN(curIndex + 1, num, curSelect);
        }
        for (var i = 1; i <= this.a.length; i++) {
            this.mGetN(0, i, "");
        }
        return this.r;
    }
    </script>
</head>
<body></body>
</html>

 

["A","B","C"]与["1","2","3"]组合的结果:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-12
var aArr = ['a', 'b', 'c'];
var bArr = ['大', '小'];
var cArr = ['西瓜', '冬瓜', '葡萄'];
var dArr = [{name:'hello'},{name:'look'}];
// 装载所有需要组合的数组
var totalArr = [aArr, bArr, cArr,dArr];
// 最终得到的所有的元素组合数组
var targetList = [];
// 所有的数组组合放在一起计算
function countList(allArr) {
if (allArr && allArr.length > 0) {
if (allArr.length > 1) {
var iArr = allArr[0];
var jArr = allArr[1];
var newArr = twoArrComp(iArr, jArr);
var leftArr = [];
for(var m = 0;m<allArr.length;m++){
if(m>1){
leftArr.push(allArr[m])
}
}
leftArr.unshift(newArr);
if(leftArr.length>1){
countList(leftArr);
}else{
targetList = leftArr;
}
} else {
targetList = allArr[0];
}
}
}
countList(totalArr);
console.log(targetList);
// 数组两两组合
var _resultArr = [];
function twoArrComp(aArr, bArr) {
var listArr = [];
if (aArr && aArr.length > 0 && bArr && bArr.length > 0) {
aArr.forEach(function (aItem) {
bArr.forEach(function (bItem) {
_resultArr = [];
splitArrToOneDir(aItem);
splitArrToOneDir(bItem);
listArr.push(_resultArr)
})
})
}
return listArr;
}
// 函数递归,把多维数组拆成一维平面数组
function splitArrToOneDir(item){
if(isArray(item) == true){
item.forEach(function(childItem){
if(isArray(childItem) == true){
splitArrToOneDir(childItem)
}else{
_resultArr.push(childItem);
}
})
}else{
_resultArr.push(item);
}
}
// 判断是否是Array数组
function isArray(item) {
var _isArray = false;
if (Array.isArray) {
_isArray = Array.isArray(item);
} else {
_isArray = Object.prototype.toString().call(item) === "[object Array]"
}
return _isArray;
}
第2个回答  2013-10-17
var c=new Array(); 
var k=0,as="",bs="";
//A1,A2...... 赋值给数组c
 for(var i=0;i<a.length;i++)
{
    for(var j=0;j<b.length;j++)
    {
        c[k]=a[i]+b[j];
        k++; 
    }
}
//求a中字符和 
for(var m=0;m<a.length;m++)
{
     as+=a[m];
}
//求b中字符和 
for(var n=0;n<b.length;n++)
{
     bs+=b[n];  
}
// AB1,AB2赋值给数组c
 for(n=0;n<b.length;n++)
{
     c[k]=as+b[n];
     k++;  
}
//A12,B12赋值给数组c 
for(m=0;m<a.length;m++)
{
     c[k]=a[m]+bs;
     k++;  
}
c[k]=as+bs;//将AB12赋值给数组c 
for(k=0;k<c.length;k++)
   alert(c[k]);

相似回答