0

I'm trying to make cartesian product of multiple arrays while maintaining dictionary keys.

I've came across this answer, which helped me, but doesn't keep my dictionary keys for each value?

const cartesian =
  (...a) => a.reduce((a, b) => a.flatMap(d => b.map(e => [d, e].flat())));

Is there any way to take this very elegant and short function and maintain my keys?

let arrays = [
  {key1: ['value1', 'value2']},
  {key2: ['value3', 'value4']},
  {key3: ['value5', 'value6']}
];

const currentResults = [
  ["value1", "value3", "value5"],
  ["value1", "value3", "value6"],
  ["value1", "value4", "value5"],
  ["value1", "value4", "value6"],
  ["value2", "value3", "value5"],
  ["value2", "value3", "value6"],
  ["value2", "value4", "value5"],
  ["value2", "value4", "value6"]
]

const resultsIWant = [
  [{
    key1: 'value1',
    key2: 'value3',
    key3: 'value5'
  }],
  [{
    key1: 'value1',
    key2: 'value3',
    key3: 'value6'
  }],
  [{
    key1: 'value1',
    key2: 'value4',
    key3: 'value5'
  }],
  [{
    key1: 'value1',
    key2: 'value4',
    key3: 'value6'
  }],
  [{
    key1: 'value2',
    key2: 'value3',
    key3: 'value5'
  }],
  [{
    key1: 'value2',
    key2: 'value3',
    key3: 'value6'
  }],
  [{
    key1: 'value2',
    key2: 'value4',
    key3: 'value5'
  }],
  [{
    key1: 'value2',
    key2: 'value4',
    key3: 'value6'
  }]
]
Omri Attiya
  • 3,759
  • 3
  • 18
  • 33
  • How about currentResults = currentResults.map(function(currentValue, index, arr){return {key1:currentValue[0],key2:currentValue[1],key3:currentValue[2]}}) – Jeremy Kahan Jun 16 '21 at 21:33

0 Answers0