JavaScript中的矩阵可能性

时间:2018-07-18 12:25:27

标签: javascript node.js matrix statistics reduce

你好

正如您在下面的要点中看到的那样,对象或数组中有03个不同的属性(我可以使用其中任何一个作为输入),并且我必须发现它们之间组合的所有可能性。

在这种情况下,我们只有03个属性,但我们可以轻松拥有20多个道具...

我如何以一种聪明的方式实现它?考虑更多的数据...

https://gist.github.com/matheus-rossi/c0261d1d8e138475c049f500fb2616fa

const configPossibilities = [ [ 1 ], [ 1, 2 ], [ 1, 2, 3, 4 ] ] 

const configPossibilities2 = {
 ID_LINHA: [ 1 ],
 ID_IMPLEMENTO: [ 1 , 2 ],
 ID_COMPOSICAO: [ 1 , 2 , 3 , 4 ]
} 

const desiredResult = [
  [1, 1, 1 ],
  [1, 1, 2 ],
  [1, 1, 3 ],
  [1, 1, 4 ],
  [1, 2, 1 ],
  [1, 2, 2 ],
  [1, 2, 3 ],
  [1, 1, 4 ],
]

1 个答案:

答案 0 :(得分:0)

  function getPossibilities(obj){
    return cartesian(...Object.values(obj))
  }

  function cartesian() {
    var r = [], arg = arguments, max = arg.length-1
    function helper(arr, i) {
      for (var j=0, l=arg[i].length; j<l; j++) {
        var a = arr.slice(0)
        a.push(arg[i][j])
        if (i==max) {
          r.push(a)
        }
        else {
          helper(a, i+1)
        }
      }
    }
    helper([], 0)
    return r
  }

  const desiredResult = getPossibilities(configPossibilities2)