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": "Метал", // или Стекло (все возможные уникальные варианты между собой) По аналогии с "Диагональ экрана" и "Оперативная память"
    },
  ]

Ответы (0 шт):