SKU排列算法

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];
	}
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值