首页 > 其他 > 详细

笛卡尔积方法

时间:2020-04-16 21:04:58      阅读:60      评论:0      收藏:0      [点我收藏+]
   multiCartesian (specs) {
      // 判断是否传递了参数,是否是空数组
      if (!specs || specs.length === 0) {
        return []
      } else {
        return joinSpec([[]], specs, 0, specs.length - 1)
      }
      // prevProducts 和 specs 两个数组做笛卡尔积
      // i 是索引,表示原始数组遍历的位数
      // max 是原始数组最大的长度 -1
      function joinSpec (prevProducts, specs, i, max) {
        var currentProducts = []
        var currentProduct
        var currentSpecs = specs[i]
        if (i > max) {
          return prevProducts
        }
        // 前面的数组 和 紧跟着后面的数组 做笛卡尔积
        prevProducts.forEach(prevProduct => {
          currentSpecs.forEach(spec => {
            currentProduct = prevProduct.slice(0)
            currentProduct.push(spec)
            currentProducts.push(currentProduct)
          })
        })
        // 递归处理,前面笛卡尔积之后的结果作为前面的数组,然后循环往前推进1位
        return joinSpec(currentProducts, specs, ++i, max)
      }
    }
      console.log(this.multiCartesian([ [1,2],[3,4] ]) )
      // [1, 3]
      // [1, 4]
      // [2, 3]
      // [2, 4]
// 需要对数组对象进行处理时需将数组外嵌套 JSON.parse(JSON.stringify(arr))
     var arr1 = [ 
          { label: ‘按日‘, value: ‘01‘ }, 
          { label: ‘按月‘, value: ‘02‘ }
        ]
        var arr1 = [ 
          { label: ‘交易笔数‘, value: ‘01‘ },
          { label: ‘交易金额‘, value: ‘02‘ }
        ]
        console.log(
          this.multiCartesian([JSON.parse(JSON.stringify(arr1)), JSON.parse(JSON.stringify(arr1))])
        )
    1. 0: {label: "交易笔数", value: "01"}
    2. 1: {label: "交易笔数", value: "01"}
    3. length: 2
    4. __proto__: Array(0)
  1. 1: Array(2)
    1. 0: {label: "交易笔数", value: "01"}
    2. 1: {label: "交易金额", value: "02"}
    3. length: 2
    4. __proto__: Array(0)
  2. 2: Array(2)
    1. 0: {label: "交易金额", value: "02"}
    2. 1: {label: "交易笔数", value: "01"}
    3. length: 2
    4. __proto__: Array(0)
  3. 3: Array(2)
    1. 0: {label: "交易金额", value: "02"}
    2. 1: {label: "交易金额", value: "02"}
 

 

笛卡尔积方法

原文:https://www.cnblogs.com/lizqhngs/p/12715083.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!