Aggiunta di elementi all'array multidimensionale

Sep 24 2020

Voglio aggiungere un nuovo elemento a un campo che voglio con javascript in un array come segue. Sono stato in grado di gestire il processo di rimozione con l'aiuto che ho ricevuto dal link sottostante. Ma l'aggiunta sembra un po 'più difficile.

Il problema è aggiungere l'elemento che voglio aggiungere, ad esempio, sotto l'elemento con id = 10.

Elimina elemento array da array infinito multidimensionale

Esempio: elemento da aggiungere

{
        "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": []
    },

Voglio aggiungere l'elemento precedente a navigation_sub_categories [] dell'elemento il cui 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": []
}

]

Risposte

MDReal Sep 25 2020 at 06:18

È anche così facile di quanto penso ieri. Codice simile. Provare

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;
};

Piacere di aiutarti. Se hai bisogno anche di aiuto puoi scrivere al mio whatsapp. +994705069324. Oppure pubblica qui, ti seguo per chiedere aiuto ...

MattEllen Sep 24 2020 at 20:08

Usa il metodo Array.prototype.find per trovare quello che stai cercando.

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