#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)