java版
public static void main(String[] args) {
Object sku [] = new Object[3];
String s1[]={
"黑","白"};
String s2[]={
"x","xl","xxxl"};
String s3[]={
"长","短"};
sku[0]=s1;
sku[1]=s2;
sku[2]=s3;
String []skuArray=process(sku);
System.out.println(Arrays.toString(skuArray));
}
public static String[] process(Object sku[]){
int len = sku.length;
if(len>=2){
String s1[]= (String[]) sku[0];
int len1=s1.length;
String s2[]= (String[]) sku[1];
int len2=s2.length;
int len3=len1*len2;
int index=0;
String items[]=new String[len3];
for(int i = 0; i < len1; i++) {
for(int j = 0; j < len2; j++) {
items[index] = ((String[]) sku[0])[i] + ";" + ((String[]) sku[1])[j];
index++;
}
}
// 将新组合的数组并到原数组中
Object newArr[]=new Object[len-1];
for(int i = 2; i < sku.length; i++) {
newArr[i - 1] = sku[i];
}
newArr[0] = items;
return process(newArr);
}else {
return (String[]) sku[0];
}
}
运行结果
[黑;x;长, 黑;x;短, 黑;xl;长, 黑;xl;短, 黑;xxxl;长, 黑;xxxl;短, 白;x;长, 白;x;短, 白;xl;长, 白;xl;短, 白;xxxl;长, 白;xxxl;短]
js版
function doExchange(arr) {
var len = arr.length;
// 当数组大于等于2个的时候
if(len >= 2) {
// 第一个数组的长度
var len1 = arr[0].length;
// 第二个数组的长度
var len2 = arr[1].length;
// 2个数组产生的组合数
var lenBoth = len1 * len2;
// 申明一个新数组,做数据暂存
var items = new Array(lenBoth);
// 申明新数组的索引
var index = 0;
// 2层嵌套循环,将组合放到新数组中
for(var i = 0; i < len1; i++) {
for(var j = 0; j < len2; j++) {
items[index] = arr[0][i] + ";" + arr[1][j];
index++;
}
}
// 将新组合的数组并到原数组中
var newArr = new Array(len - 1);
for(var i = 2; i < arr.length; i++) {
newArr[i - 1] = arr[i];
}
newArr[0] = items;
// 执行回调
return doExchange(newArr);
} else {
return arr[0];
}
}