Adicionando elementos ao array multidimensional

Sep 24 2020

Quero adicionar um novo item a um campo que desejo com javascript em uma matriz da seguinte maneira. Consegui lidar com o processo de remoção com a ajuda que recebi no link abaixo. Mas adicionar parece um pouco mais difícil.

O problema é adicionar o item que desejo adicionar, por exemplo, sob o elemento com id = 10.

Excluir elemento de matriz de matriz infinita multidimensional

Exemplo: item para adicionar

{
        "id": 99,
        "navigation_main_category_id": 6,
        "navigation_sub_category_id": null,
        "place": 100,
        "header_tr": "Example item",
        "header_en": "Example item",
        "content_tr": "example-item",
        "content_en": "example-item",
        "href_tr": "example-item",
        "href_en": "example-item",
        "constant_status": "İç Link",
        "visible_main_status": "Aktif",
        "created_at": "2020-05-24 01:08:59",
        "updated_at": "2020-05-24 01:08:59",
        "deleted_at": null,
        "navigation_sub_categories": [],
        "dynamic_fixed_pages": []
    },

Desejo adicionar o item acima a navigation_sub_categories [] do item cujo ID é 10.

[
{
    "id": 6,
    "place": 100,
    "header_tr": "KURUMSAL",
    "header_en": "CORPORATE",
    "content_tr": "kurumsal",
    "content_en": "corporate",
    "visible_main_status": "Aktif",
    "created_at": "2020-05-24 01:02:36",
    "updated_at": "2020-05-24 01:02:36",
    "deleted_at": null,
    "navigation_sub_categories": [
        {
            "id": 10,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": null,
            "place": 100,
            "header_tr": "Vizyonumuz ve Misyonumuz",
            "header_en": "Vizyonumuz ve Misyonumuz",
            "content_tr": "vizyonumuz-ve-misyonumuz",
            "content_en": "vizyonumuz-ve-misyonumuz",
            "href_tr": "vizyonumuz-ve-misyonumuz",
            "href_en": "vizyonumuz-ve-misyonumuz",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:08:59",
            "updated_at": "2020-05-24 01:08:59",
            "deleted_at": null,
            "navigation_sub_categories": [],
            "dynamic_fixed_pages": []
        },
        {
            "id": 11,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": null,
            "place": 99,
            "header_tr": "Temel Değerlerimiz ve Yönetim Politikamız",
            "header_en": "Temel Değerlerimiz ve Yönetim Politikamız",
            "content_tr": "Temel Değerlerimiz ve Yönetim Politikamız",
            "content_en": "Temel Değerlerimiz ve Yönetim Politikamız",
            "href_tr": "Temel Değerlerimiz ve Yönetim Politikamız",
            "href_en": "Temel Değerlerimiz ve Yönetim Politikamız",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:09:26",
            "updated_at": "2020-05-24 01:09:26",
            "deleted_at": null,
            "navigation_sub_categories": [],
            "dynamic_fixed_pages": []
        },
        {
            "id": 12,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": null,
            "place": 98,
            "header_tr": "Organizasyon Yapısı",
            "header_en": "Organizasyon Yapısı",
            "content_tr": "Organizasyon Yapısı",
            "content_en": "Organizasyon Yapısı",
            "href_tr": "Organizasyon Yapısı",
            "href_en": "Organizasyon Yapısı",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:10:33",
            "updated_at": "2020-05-24 01:10:33",
            "deleted_at": null,
            "navigation_sub_categories": [
                {
                    "id": 19,
                    "navigation_main_category_id": 6,
                    "navigation_sub_category_id": 12,
                    "place": 100,
                    "header_tr": "Yönetim Kurulu",
                    "header_en": "Yönetim Kurulu",
                    "content_tr": "/tr/kurumsal/organizasyon-yapilari/yonetim-kurulu",
                    "content_en": "/en/kurumsal/organizasyon-yapilari/yonetim-kurulu",
                    "href_tr": "Yönetim Kurulu",
                    "href_en": "Yönetim Kurulu",
                    "constant_status": "İç Link",
                    "visible_main_status": "Aktif",
                    "created_at": "2020-05-24 01:13:27",
                    "updated_at": "2020-05-26 08:58:49",
                    "deleted_at": null,
                    "navigation_sub_categories": [],
                    "dynamic_fixed_pages": []
                },
                {
                    "id": 20,
                    "navigation_main_category_id": 6,
                    "navigation_sub_category_id": 12,
                    "place": 99,
                    "header_tr": "Meclis",
                    "header_en": "Meclis",
                    "content_tr": "Meclis",
                    "content_en": "Meclis",
                    "href_tr": "Meclis",
                    "href_en": "Meclis",
                    "constant_status": "İç Link",
                    "visible_main_status": "Aktif",
                    "created_at": "2020-05-24 01:13:46",
                    "updated_at": "2020-05-24 01:13:46",
                    "deleted_at": null,
                    "navigation_sub_categories": [],
                    "dynamic_fixed_pages": []
                },
                {
                    "id": 21,
                    "navigation_main_category_id": 6,
                    "navigation_sub_category_id": 12,
                    "place": 98,
                    "header_tr": "Disiplin Kurulu",
                    "header_en": "Disiplin Kurulu",
                    "content_tr": "Disiplin Kurulu",
                    "content_en": "Disiplin Kurulu",
                    "href_tr": "Disiplin Kurulu",
                    "href_en": "Disiplin Kurulu",
                    "constant_status": "İç Link",
                    "visible_main_status": "Aktif",
                    "created_at": "2020-05-24 01:14:06",
                    "updated_at": "2020-05-24 01:14:06",
                    "deleted_at": null,
                    "navigation_sub_categories": [],
                    "dynamic_fixed_pages": []
                },
                {
                    "id": 22,
                    "navigation_main_category_id": 6,
                    "navigation_sub_category_id": 12,
                    "place": 97,
                    "header_tr": "Meslek Komiteleri Üyeleri",
                    "header_en": "Meslek Komiteleri Üyeleri",
                    "content_tr": "Meslek Komiteleri Üyeleri",
                    "content_en": "Meslek Komiteleri Üyeleri",
                    "href_tr": "Meslek Komiteleri Üyeleri",
                    "href_en": "Meslek Komiteleri Üyeleri",
                    "constant_status": "İç Link",
                    "visible_main_status": "Aktif",
                    "created_at": "2020-05-24 01:14:32",
                    "updated_at": "2020-05-24 01:14:32",
                    "deleted_at": null,
                    "navigation_sub_categories": [
                        {
                            "id": 23,
                            "navigation_main_category_id": 6,
                            "navigation_sub_category_id": 22,
                            "place": 100,
                            "header_tr": "Meslek Altı",
                            "header_en": "Meslek Altı",
                            "content_tr": "Meslek Altı",
                            "content_en": "Meslek Altı",
                            "href_tr": "Meslek Altı",
                            "href_en": "Meslek Altı",
                            "constant_status": "İç Link",
                            "visible_main_status": "Pasif",
                            "created_at": "2020-05-24 11:32:00",
                            "updated_at": "2020-05-24 11:32:00",
                            "deleted_at": null,
                            "navigation_sub_categories": [
                                {
                                    "id": 24,
                                    "navigation_main_category_id": 6,
                                    "navigation_sub_category_id": 23,
                                    "place": 100,
                                    "header_tr": "Meslek Alt Alt",
                                    "header_en": "Meslek Alt Alt",
                                    "content_tr": "Meslek Alt Alt",
                                    "content_en": "Meslek Alt Alt",
                                    "href_tr": "Meslek Alt Alt",
                                    "href_en": "Meslek Alt Alt",
                                    "constant_status": "İç Link",
                                    "visible_main_status": "Pasif",
                                    "created_at": "2020-05-24 11:33:20",
                                    "updated_at": "2020-05-24 11:33:20",
                                    "deleted_at": null,
                                    "navigation_sub_categories": [],
                                    "dynamic_fixed_pages": []
                                },
                                {
                                    "id": 76,
                                    "navigation_main_category_id": 6,
                                    "navigation_sub_category_id": 23,
                                    "place": 44,
                                    "header_tr": "44",
                                    "header_en": "44",
                                    "content_tr": null,
                                    "content_en": null,
                                    "href_tr": null,
                                    "href_en": null,
                                    "constant_status": "İç Link",
                                    "visible_main_status": "Aktif",
                                    "created_at": "2020-09-24 12:51:25",
                                    "updated_at": "2020-09-24 12:51:25",
                                    "deleted_at": null,
                                    "navigation_sub_categories": [],
                                    "dynamic_fixed_pages": []
                                },
                                {
                                    "id": 79,
                                    "navigation_main_category_id": 6,
                                    "navigation_sub_category_id": 23,
                                    "place": 77,
                                    "header_tr": "77",
                                    "header_en": "77",
                                    "content_tr": null,
                                    "content_en": null,
                                    "href_tr": null,
                                    "href_en": null,
                                    "constant_status": "İç Link",
                                    "visible_main_status": "Aktif",
                                    "created_at": "2020-09-24 12:51:43",
                                    "updated_at": "2020-09-24 12:51:43",
                                    "deleted_at": null,
                                    "navigation_sub_categories": [],
                                    "dynamic_fixed_pages": []
                                }
                            ],
                            "dynamic_fixed_pages": []
                        }
                    ],
                    "dynamic_fixed_pages": []
                }
            ],
            "dynamic_fixed_pages": []
        },
        {
            "id": 13,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": null,
            "place": 97,
            "header_tr": "Meclis Konuşmaları",
            "header_en": "Meclis Konuşmaları",
            "content_tr": "Meclis Konuşmaları",
            "content_en": "Meclis Konuşmaları",
            "href_tr": "Meclis Konuşmaları",
            "href_en": "Meclis Konuşmaları",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:11:21",
            "updated_at": "2020-05-24 01:11:21",
            "deleted_at": null,
            "navigation_sub_categories": [],
            "dynamic_fixed_pages": []
        },
        {
            "id": 14,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": null,
            "place": 96,
            "header_tr": "Logo",
            "header_en": "Logo",
            "content_tr": "Logo",
            "content_en": "Logo",
            "href_tr": "Logo",
            "href_en": "Logo",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:11:39",
            "updated_at": "2020-05-24 01:11:39",
            "deleted_at": null,
            "navigation_sub_categories": [],
            "dynamic_fixed_pages": []
        },
        {
            "id": 15,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": null,
            "place": 96,
            "header_tr": "Oda Hesapları",
            "header_en": "Oda Hesapları",
            "content_tr": "Oda Hesapları",
            "content_en": "Oda Hesapları",
            "href_tr": "Oda Hesapları",
            "href_en": "Oda Hesapları",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:11:58",
            "updated_at": "2020-05-24 01:11:58",
            "deleted_at": null,
            "navigation_sub_categories": [],
            "dynamic_fixed_pages": []
        },
        {
            "id": 16,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": null,
            "place": 95,
            "header_tr": "Stratejik Planlar ve Çalışma Programları",
            "header_en": "Stratejik Planlar ve Çalışma Programları",
            "content_tr": "Stratejik Planlar ve Çalışma Programları",
            "content_en": "Stratejik Planlar ve Çalışma Programları",
            "href_tr": "Stratejik Planlar ve Çalışma Programları",
            "href_en": "Stratejik Planlar ve Çalışma Programları",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:12:17",
            "updated_at": "2020-05-24 01:12:17",
            "deleted_at": null,
            "navigation_sub_categories": [],
            "dynamic_fixed_pages": []
        },
        {
            "id": 17,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": null,
            "place": 94,
            "header_tr": "Kardeş Odalar",
            "header_en": "Kardeş Odalar",
            "content_tr": "Kardeş Odalar",
            "content_en": "Kardeş Odalar",
            "href_tr": "Kardeş Odalar",
            "href_en": "Kardeş Odalar",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:12:36",
            "updated_at": "2020-05-24 01:12:36",
            "deleted_at": null,
            "navigation_sub_categories": [],
            "dynamic_fixed_pages": []
        },
        {
            "id": 18,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": null,
            "place": 94,
            "header_tr": "KVKK",
            "header_en": "KVKK",
            "content_tr": "KVKK",
            "content_en": "KVKK",
            "href_tr": "KVKK",
            "href_en": "KVKK",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:12:55",
            "updated_at": "2020-05-24 01:12:55",
            "deleted_at": null,
            "navigation_sub_categories": [
                {
                    "id": 27,
                    "navigation_main_category_id": 6,
                    "navigation_sub_category_id": 18,
                    "place": 10,
                    "header_tr": "Test Kvkk Alt",
                    "header_en": "Test Kvkk Alt EN",
                    "content_tr": "Test Kvkk Alt",
                    "content_en": "Test Kvkk Alt EN",
                    "href_tr": "test-kvkk-alt-tr",
                    "href_en": "test-kvkk-alt-en",
                    "constant_status": "İç Link",
                    "visible_main_status": "Aktif",
                    "created_at": "2020-09-21 13:10:38",
                    "updated_at": "2020-09-21 13:10:38",
                    "deleted_at": null,
                    "navigation_sub_categories": [],
                    "dynamic_fixed_pages": []
                }
            ],
            "dynamic_fixed_pages": []
        }
    ]
},
{
    "id": 12,
    "navigation_main_category_id": 6,
    "navigation_sub_category_id": null,
    "place": 98,
    "header_tr": "Organizasyon Yapısı",
    "header_en": "Organizasyon Yapısı",
    "content_tr": "Organizasyon Yapısı",
    "content_en": "Organizasyon Yapısı",
    "href_tr": "Organizasyon Yapısı",
    "href_en": "Organizasyon Yapısı",
    "constant_status": "İç Link",
    "visible_main_status": "Aktif",
    "created_at": "2020-05-24 01:10:33",
    "updated_at": "2020-05-24 01:10:33",
    "deleted_at": null,
    "navigation_sub_categories": [
        {
            "id": 19,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": 12,
            "place": 100,
            "header_tr": "Yönetim Kurulu",
            "header_en": "Yönetim Kurulu",
            "content_tr": "/tr/kurumsal/organizasyon-yapilari/yonetim-kurulu",
            "content_en": "/en/kurumsal/organizasyon-yapilari/yonetim-kurulu",
            "href_tr": "Yönetim Kurulu",
            "href_en": "Yönetim Kurulu",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:13:27",
            "updated_at": "2020-05-26 08:58:49",
            "deleted_at": null,
            "navigation_sub_categories": [],
            "dynamic_fixed_pages": []
        },
        {
            "id": 20,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": 12,
            "place": 99,
            "header_tr": "Meclis",
            "header_en": "Meclis",
            "content_tr": "Meclis",
            "content_en": "Meclis",
            "href_tr": "Meclis",
            "href_en": "Meclis",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:13:46",
            "updated_at": "2020-05-24 01:13:46",
            "deleted_at": null,
            "navigation_sub_categories": [],
            "dynamic_fixed_pages": []
        },
        {
            "id": 21,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": 12,
            "place": 98,
            "header_tr": "Disiplin Kurulu",
            "header_en": "Disiplin Kurulu",
            "content_tr": "Disiplin Kurulu",
            "content_en": "Disiplin Kurulu",
            "href_tr": "Disiplin Kurulu",
            "href_en": "Disiplin Kurulu",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:14:06",
            "updated_at": "2020-05-24 01:14:06",
            "deleted_at": null,
            "navigation_sub_categories": [],
            "dynamic_fixed_pages": []
        },
        {
            "id": 22,
            "navigation_main_category_id": 6,
            "navigation_sub_category_id": 12,
            "place": 97,
            "header_tr": "Meslek Komiteleri Üyeleri",
            "header_en": "Meslek Komiteleri Üyeleri",
            "content_tr": "Meslek Komiteleri Üyeleri",
            "content_en": "Meslek Komiteleri Üyeleri",
            "href_tr": "Meslek Komiteleri Üyeleri",
            "href_en": "Meslek Komiteleri Üyeleri",
            "constant_status": "İç Link",
            "visible_main_status": "Aktif",
            "created_at": "2020-05-24 01:14:32",
            "updated_at": "2020-05-24 01:14:32",
            "deleted_at": null,
            "navigation_sub_categories": [
                {
                    "id": 23,
                    "navigation_main_category_id": 6,
                    "navigation_sub_category_id": 22,
                    "place": 100,
                    "header_tr": "Meslek Altı",
                    "header_en": "Meslek Altı",
                    "content_tr": "Meslek Altı",
                    "content_en": "Meslek Altı",
                    "href_tr": "Meslek Altı",
                    "href_en": "Meslek Altı",
                    "constant_status": "İç Link",
                    "visible_main_status": "Pasif",
                    "created_at": "2020-05-24 11:32:00",
                    "updated_at": "2020-05-24 11:32:00",
                    "deleted_at": null,
                    "navigation_sub_categories": [
                        {
                            "id": 24,
                            "navigation_main_category_id": 6,
                            "navigation_sub_category_id": 23,
                            "place": 100,
                            "header_tr": "Meslek Alt Alt",
                            "header_en": "Meslek Alt Alt",
                            "content_tr": "Meslek Alt Alt",
                            "content_en": "Meslek Alt Alt",
                            "href_tr": "Meslek Alt Alt",
                            "href_en": "Meslek Alt Alt",
                            "constant_status": "İç Link",
                            "visible_main_status": "Pasif",
                            "created_at": "2020-05-24 11:33:20",
                            "updated_at": "2020-05-24 11:33:20",
                            "deleted_at": null,
                            "navigation_sub_categories": [],
                            "dynamic_fixed_pages": []
                        },
                        **{
                            "id": 76,
                            "navigation_main_category_id": 6,
                            "navigation_sub_category_id": 23,
                            "place": 44,
                            "header_tr": "44",
                            "header_en": "44",
                            "content_tr": null,
                            "content_en": null,
                            "href_tr": null,
                            "href_en": null,
                            "constant_status": "İç Link",
                            "visible_main_status": "Aktif",
                            "created_at": "2020-09-24 12:51:25",
                            "updated_at": "2020-09-24 12:51:25",
                            "deleted_at": null,
                            "navigation_sub_categories": [],
                            "dynamic_fixed_pages": []
                        },**
                        {
                            "id": 79,
                            "navigation_main_category_id": 6,
                            "navigation_sub_category_id": 23,
                            "place": 77,
                            "header_tr": "77",
                            "header_en": "77",
                            "content_tr": null,
                            "content_en": null,
                            "href_tr": null,
                            "href_en": null,
                            "constant_status": "İç Link",
                            "visible_main_status": "Aktif",
                            "created_at": "2020-09-24 12:51:43",
                            "updated_at": "2020-09-24 12:51:43",
                            "deleted_at": null,
                            "navigation_sub_categories": [],
                            "dynamic_fixed_pages": []
                        }
                    ],
                    "dynamic_fixed_pages": []
                }
            ],
            "dynamic_fixed_pages": []
        }
    ],
    "dynamic_fixed_pages": []
}

]

Respostas

MDReal Sep 25 2020 at 06:18

É tão fácil também do que pensei ontem. Código semelhante. Experimentar

const filterObject = (object, id, obj) => {
  const newObj = [];
  object.map((element) => {
    if (
      typeof element.navigation_sub_categories === "object" &&
      Array.isArray(element.navigation_sub_categories)
    )
      element.navigation_sub_categories = filterObject(element.navigation_sub_categories, id, obj);

    if (parseInt(element.id) === parseInt(id))
      element.navigation_sub_categories = [element.navigation_sub_categories, obj].filter(Boolean);
    newObj.push(element);
  });
  return newObj;
};

Prazer em ajudá-lo. Se precisar de ajuda também pode escrever para o meu Whatsapp. +994705069324. Ou Poste Aqui eu rastreio você para obter ajuda ...

MattEllen Sep 24 2020 at 20:08

Use o método Array.prototype.find para encontrar o que você está procurando.

function addSubSubObject(objs, mainid, subid, subsubobj)
{
  let mainobj = objs.find(o => o.id == mainid);
  if(mainobj)
  {
    let subobj = mainobj.navigation_sub_categories.find(o => o.id == subid);
    if(subobj)
    {
      subobj.navigation_sub_categories.push(subsubobj);
      subsubobj.navigation_sub_category_id = subid;
    }
    else
    {
      let subindex = 0;
      while(!subobj && subindex < mainobj.navigation_sub_categories.length)
      {
        const objToCheck = mainobj.navigation_sub_categories[subindex];
        if(objToCheck.navigation_sub_categories.length > 0)
        {
          subobj = findSubObject(objToCheck, subid);
        }
        subindex++;
      }
      
      if(subobj)
      {
        subobj.navigation_sub_categories.push(subsubobj);
        subsubobj.navigation_sub_category_id = subobj.id;
      }
    }
  }
}

function findSubObject(mainObj, subid)
{
  let subobj = mainObj.navigation_sub_categories.find(o => o.id == subid);
  if(!subobj)
  {
    let subindex = 0;
    while(!subobj && subindex < mainobj.navigation_sub_categories.length)
    {
      const objToCheck = mainobj.navigation_sub_categories[subindex];
      if(objToCheck.navigation_sub_categories.length > 0)
      {
          subobj = findSubObject(objToCheck, subid);
      }
      subindex++;
    }
  }
  return subobj;
}

let ins = 
{
  "id": 99,
  "navigation_main_category_id": 6,
  "navigation_sub_category_id": null,
  "navigation_sub_categories": [],
};

let ins2 = 
{
  id:44,
  "navigation_main_category_id": 6,
  "navigation_sub_category_id": null,
  "navigation_sub_categories": [],
};

let objs = 
[
{
    "id": 6,
    "navigation_sub_categories": 
    [
    {
      "id": 10,
      "navigation_main_category_id": 6,
      "navigation_sub_category_id": null,
      "navigation_sub_categories": [],
    }
    ]
}
]

addSubSubObject(objs, 6, 10, ins);
addSubSubObject(objs, 6, 99, ins2);

console.log(JSON.stringify(objs))