JS笛卡尔积运算优化--商品规格组合

2,075 阅读1分钟

前段时间又写了一个商城后台,又要写关于商品规格这一块的,正好,这次有时间,就对这段代码进行优化,也百度了不少,参考了一段Python代码
6.11更新,修复规格只有一个的bug

话就不多说,我感觉这代码挺简洁的,但实现的功能还是不差的,

// 接收一个list[['白色', '红色','黑色'],['S','M','L'],['6+128', '8+128','L'],...]
selectArr (list) {
    function sortTable(arr, item) {
      let brr = [];
      for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < item.length; j++) {
          if (typeof arr[i] == 'object') {
            brr.push([...arr[i],item[j]])
          }else{
            brr.push([arr[i],item[j]])
          }
        }
      }
      return brr;
    }
    if (list.length>1) {
      return list.reduce(sortTable)
    }else{
      let arr = []
      list[0].forEach(item=>{
        arr.push([item])
      })
      return arr
    }
  }
  //输出:['白色', 'S','6+128']...(其中省略25个规格数组).....['黑色', 'L','L']

这段代码主要用的是reduce来实现这个功能,reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。 即reduce接收函数的第一个参数是上一次return的值,item是数组的当前项。