sku组合

m*n 数组的排列组合问题,sku组合思考
m行n列
例:
一件T恤,有3种属性:颜色,性别,码数;
颜色:红,黑,白;
适用性别:男,女;
码数:s,m,l;
sku组合结果:
红男s; 红男m; 红男l; 红女s; 红女m; 红女l;
黑男s; 黑男m; 黑男l; 黑女s; 黑女m; 黑女l;
白男s; 白男m; 白男l; 白女s; 白女m; 白女l;

人是怎么做出来的?
属性超过1种,固定先选颜色‘红’,
往下一属性性别,属性超过2种,先固定选‘男’,
再往下一属性码数,属性不超过3种,则第一回合得到[红男s, 红男m, 红男l]
...
const sku = [[1, 2, 3], [11, 22, 33], [111, 222, 333]]  // 类别数组,你也可以换其他m行n列数组,不定长度
var arr = []  // 返回的组合
function func(skuarr = [], i = 0) {  // 递归,i是当前要遍历第几行,从0开始
  for (let j = 0; j < sku[i].length; j++) {  // j是当前第几列
    if (i < sku.length - 1) {  // 如果当前还不是最后一行,则进行递归
      skuarr[i] = sku[i][j]
      func(skuarr, i + 1)
    } else {
      arr.push([...skuarr, sku[i][j]])
    }
  }
  return arr
}
func()  // 还应改进,写得有点粗糙了

/* result
[1, 11, 111],[1, 11, 222],[1, 11, 333],[1, 22, 111],[1, 22, 222],
[1, 22, 333],[1, 33, 111],[1, 33, 222],[1, 33, 333],[2, 11, 111],
[2, 11, 222],[2, 11, 333],[2, 22, 111],[2, 22, 222],[2, 22, 333],
[2, 33, 111],[2, 33, 222],[2, 33, 333],[3, 11, 111],[3, 11, 222],
[3, 11, 333],[3, 22, 111],[3, 22, 222],[3, 22, 333],[3, 33, 111],
[3, 33, 222],[3, 33, 333]
length: 27
*/
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值