JS 笛卡尔积(sku)

// Array.reduce 实现
const skuReduce = (arrays) => {
  return arrays.reduce((total, next) => {
    let arr = []
    total.forEach(x => {
      next.forEach(y => {
        arr.push([x].flat().concat([y]))
      })
    })
    return arr
  })
}
skuReduce([[1,2,3],[4,5,6],[7,8,9]])

// 递归实现
export const sku = (array,results = [],num = 0) => {
  if(!results.length){
    array[num].forEach(item => {
      results.push([item])
    })
  }else{
    let resultsTwo = []
    results.forEach(result => {
      array[num].forEach(item => {
        resultsTwo.push(result.concat(item))
      })
    })
    results = resultsTwo
  }
  if(num < array.length-1){
    num++
    return sku(array,results,num)
  }else {
    return results
  }
}
sku([[1,2,3],[4,5,6],[7,8,9]])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容