题目一
给出一个类型二维数组,每个数组中是一个类目(如[["红色", "绿色"], ["大号", "小号"]]
),返回所有类型的组合结果([["红色", "大号"], ["红色", "小号"], ["绿色", "大号"], ["绿色", "小号"]]
)
题目二
- 输入
[[A, B], [a, b], [1, 2]]
- 输出
[Aa1, Aa2, Ab1, Ab2, Ba1, Ba2, Bb1, Bb2]
解题思路
- multi 函数
参数:arrA,arrB
返回值:两数组的所有组合
功能:求两个数组之积 --> 所有组合
[A,B] * [a,b] ==> [Aa,Ab,Ba,Bb]
- allGroups 函数
方法一:递归。不断地传入数组,和之前的结果整合
[Aa,Ab,Ba,Bb]*[1,2]==>[Aa1, Aa2, Ab1, Ab2, Ba1, Ba2, Bb1, Bb2]
方法二:数组的 reduce 方法
function multi(arr1,arr2){
if(arr1.length==0){ // arr1 是空数组 []
return arr2;
}
if(arr2.length==0){
return arr1;
}
let res = [];
for(let i=0;i<arr1.length;i++){
for(let j=0;j<arr2.length;j++){
res.push(String(arr1[i])+String(arr2[j]))
}
}
return res;
}
let arr1 = ["A","B"],arr2 = ["a","b"];
console.log(multi(arr1,arr2));//['Aa', 'Ab', 'Ba', 'Bb']
// reduce 拼接
function allGroups(arr){
return arr.reduce((total,cur)=>{
let ress = multi(total,cur);
console.log(ress);
return ress;
},[]);
}
let arr=[["A","B"],["a","b"],[1,2]];
allGroups(arr);// ['Aa1', 'Aa2', 'Ab1', 'Ab2', 'Ba1', 'Ba2', 'Bb1', 'Bb2']
- allGroups 如果用方法一:
function allGroups(arr){
let ress = [];
while(arr.length!==0){// 递归出口
let curArr = arr.shift();
ress = multi(ress,curArr);
}
return ress;
}