Декартово произведение значений объекта (в массив)

#javascript #arrays #multidimensional-array

#javascript #массивы #многомерный-массив

Вопрос:

Допустим, у меня есть

 const item = {
  "Key1": "Value1",
  "Key2": ["Value2", "Value3"]
}
 

Как я могу преобразовать его в формат как

 [["Value1","Value2"],["Value1","Value3"]] 
 

?

Мой способ сделать это:

 let array = [];
for (let i of item.Key2){
  array.push([item.Key1,i])
}
 

Просто интересно, есть ли какой-нибудь более короткий метод?

Комментарии:

1. Почему "Value2" внутри первого элемента массива.

2. Также, пожалуйста, поделитесь своими попытками.

3. @MaheerAli Рассматривает это как часть требования

4. вы ищете декартово произведение .

Ответ №1:

 // What question mentions
const item = {
  "Key1": "Value1",
  "Key2": ["Value2", "Value3"]
}

let res = item.Key2.map(i => [item.Key1, i])
console.log(res) 
 // What the world wants!
const item = {
  "Key1": ["ValueA", "ValueB"],
  "Key2": ["Value1", "Value2"]
}

res = item.Key1.reduce((acc, i1) => acc.concat(item.Key2.map(i2 => [i1, i2])), [])
console.log(res) 

Комментарии:

1. Первого было бы достаточно. Второй был бы в порядке, но не является необходимым, перепроектирован.

Ответ №2:

Вы могли бы построить декартово произведение.

 const
    item = { Key1: "Value1", Key2: ["Value2", "Value3"] },
    values = Object.values(item).map(v => [].concat(v)),
    result = values.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []));

console.log(result); 

Ответ №3:

 const item = { Key1: "Value1", Key2: ["Value2", "Value3"]};

let target = item.Key2.reduce((i, _) => {
  i.push([item.Key1, _]);
  return i;
}, []);

console.log(target)