js Сгенирировать все возможные элементы массива между собой
Нужно сгенирировать все возможные варианты между собой обьектов в массиве
начальное состояние
const init = [
{
parentID: "Диагональ экрана",
childrens: [
{
childrenID: "4.59",
},
{
childrenID: "5.55",
},
{
childrenID: "4.6",
},
{
childrenID: "5.01",
},
],
},
{
parentID: "Оперативная память",
childrens: [
{
childrenID: "10 ГБ",
},
{
childrenID: "12 ГБ",
},
{
childrenID: "16 ГБ",
},
],
},
];
должен быть такой результат
4.6 | 10 ГБ | Метал
4.6 | 10 ГБ | Стекло
4.6 | 12 ГБ | Стекло
4.6 | 12 ГБ | Метал
4.6 | 16 ГБ | Метал
4.6 | 16 ГБ | Стекло
4.59 | 10 ГБ | Метал
4.59 | 10 ГБ | Стекло
4.59 | 12 ГБ | Стекло
4.59 | 12 ГБ | Метал
4.59 | 16 ГБ | Метал
4.59 | 16 ГБ | Стекло
5.01 | 10 ГБ | Метал
5.01 | 10 ГБ | Стекло
5.01 | 12 ГБ | Стекло
5.01 | 12 ГБ | Метал
5.01 | 16 ГБ | Метал
5.01 | 16 ГБ | Стекло
5.55 | 10 ГБ | Метал
5.55 | 10 ГБ | Стекло
5.55 | 12 ГБ | Стекло
5.55 | 12 ГБ | Метал
5.55 | 16 ГБ | Метал
5.55 | 16 ГБ | Стекло
результат кода
const result = [
{
$and: [
{
parentID: "Диагональ экрана",
childrenID: "4.59",
},
{
"parentID": "Оперативная память",
"childrenID": "10 ГБ",
},
],
},
{
$and: [
{
parentID: "Диагональ экрана",
childrenID: "4.59",
},
{
"parentID": "Оперативная память",
"childrenID": "12 ГБ",
},
],
},
{
$and: [
{
parentID: "Диагональ экрана",
childrenID: "4.59",
},
{
"parentID": "Оперативная память",
"childrenID": "16 ГБ",
},
],
},
{
$and: [
{
parentID: "Диагональ экрана",
childrenID: "5.01",
},
{
"parentID": "Оперативная память",
"childrenID": "10 ГБ",
},
],
},
{
$and: [
{
parentID: "Диагональ экрана",
childrenID: "5.01",
},
{
"parentID": "Оперативная память",
"childrenID": "12 ГБ",
},
],
},
{
$and: [
{
parentID: "Диагональ экрана",
childrenID: "5.01",
},
{
"parentID": "Оперативная память",
"childrenID": "16 ГБ",
},
],
},
{
$and: [
{
parentID: "Диагональ экрана",
childrenID: "4.6",
},
{
"parentID": "Оперативная память",
"childrenID": "10 ГБ",
},
],
},
{
$and: [
{
parentID: "Диагональ экрана",
childrenID: "4.6",
},
{
"parentID": "Оперативная память",
"childrenID": "12 ГБ",
},
],
},
{
$and: [
{
parentID: "Диагональ экрана",
childrenID: "4.6",
},
{
"parentID": "Оперативная память",
"childrenID": "16 ГБ",
},
],
},
{
$and: [
{
parentID: "Диагональ экрана",
childrenID: "5.55",
},
{
"parentID": "Оперативная память",
"childrenID": "10 ГБ",
},
],
},
{
$and: [
{
parentID: "Диагональ экрана",
childrenID: "5.55",
},
{
"parentID": "Оперативная память",
"childrenID": "12 ГБ",
},
],
},
{
$and: [
{
parentID: "Диагональ экрана",
childrenID: "5.55",
},
{
"parentID": "Оперативная память",
"childrenID": "16 ГБ",
},
],
},
];
Если добавить в масив init еще один обьект, то результат должен измениться
init.push({
parentID: "Корпус",
childrens: [
{
childrenID: "Метал",
},
{
childrenID: "Стекло",
},
],
});
в массиве result будет длина не 12 елементов $and, а 24 елемента
и в каждом $and будет уже не по 2 обьекта а по 3 обьекта
[
{
parentID: "Диагональ экрана",
childrenID: "4.59",
},
{
"parentID": "Оперативная память",
"childrenID": "10 ГБ",
},
{
"parentID": "Корпус",
"childrenID": "Метал", // или Стекло (все возможные уникальные варианты между собой) По аналогии с "Диагональ экрана" и "Оперативная память"
},
]