JavaScripts之迪卡算法求积(n*n)适用于SKU信息计算等场景

迪卡算法求积(n * n)

  • 使用 array.reduce 的方式实现 笛卡尔积算法
    const arr = [
      ['黑色', '白色', '蓝色'], 
      ['1.2KG', '2.0KG', '3.0KG'],
      ['a', 'b'],
      ['aa', 'bb']
    ];
    
    function descartes(array){
        if( array.length < 2 ) return array[0] || [];
    
        return array.reduce((pre, cur, index) => {
            // 第一次遍历的时候我们可以直接返回当前对象
            if(index === 0) {
                return cur
            }
            // 利用 reduce 的方式实现,需要定义一个临时的变量
            const _sku = []
            // 利用冒泡的方式进行组合
            pre.forEach(c => {
                cur.forEach(item => {
                    _sku.push(`${c}:${item}`)
                })
            })
            console.log(_sku)
            // 返回新组合的数据
            return _sku
        }, [])
    }
    
    // 会输出 3 * 3 * 2 *2 中组合
    console.log(descartes(arr));
    
  • 通过组合遍历的方式实现(思路和 reduce 差不多)
      let _sku = []
      arr.forEach(c => {
          if(!_sku.length) {
              _sku = c
          } else {
              const inner = []
              c.forEach(c1 => {
                  inner.push(..._sku.map(item => `${item}:${c1}`))
              })
    
              _sku = inner
          }
      })
    
    console.log(_sku)
    
posted @ 2021-04-09 16:02  C+V-Engineer  阅读(232)  评论(0编辑  收藏  举报