Как удалить объект из многомерного массива javascript? - PullRequest
0 голосов
/ 02 февраля 2020

Мой случай немного отличается от других случаев

У меня есть объект, который содержит такой массив:

var doctors = {
  '2bf169c6-bc51-4dc6-1234-cf81e611b6fd': [
    {
      doctor_id: "2bf169c6-bc51-4dc6-1234-cf81e611b6fd",
      name: "dr. Benjamin",
      specialization_id: "5f8e2525-65fa-4a92-2312-fcd0323ad439",
      specialization_name: "General practitioners",
      hospital_id: "63c6af56-bb9a-4962-6677-454d3345630d",
      hospital_name: "Hospital A"
    }
  ],
  'd8e31868-ebec-4af0-4321-767aa696f91a': [
    {
      doctor_id: "d8e31868-ebec-4af0-4321-767aa696f91a",
      name: "dr. Theo",
      specialization_id: "329de195-1ab6-4a43-3322-acfde447fec3",
      specialization_name: "Internal Medicine",
      hospital_id: "39764039-37b9-4176-4455-ef7b2e124ba4",
      hospital_name: "Hospital B"
    },
    {
      doctor_id: "d8e31868-ebec-4af0-4321-767aa696f91a",
      name: "dr. Theo",
      specialization_id: "329de195-1ab6-4a43-3322-acfde447fec3",
      specialization_name: "Internal Medicine",
      hospital_id: "65a60870-beab-4925-3322-4a5246e26d6a",
      hospital_name: "Hospital C"
    }
  ], 
  '0a24e765-3e3c-45e6-1122-8671eb3c0439': [
    {
      doctor_id: "0a24e765-3e3c-45e6-1122-8671eb3c0439",
      name: "dr. John",
      specialization_id: "5f8e2525-65fa-4a92-2312-fcd0323ad439",
      specialization_name: "General practitioners",
      hospital_id: "153b75ee-dc07-4290-2121-d4d28457780f",
      hospital_name: "Hospital D",
    },
    {
      doctor_id: "0a24e765-3e3c-45e6-1122-8671eb3c0439",
      name: "dr. John",
      specialization_id: "5f8e2525-65fa-4a92-2312-fcd0323ad439",
      specialization_name: "General practitioners",
      hospital_id: "153b75ee-dc07-4290-2121-d4d28457780f",
      hospital_name: "Hospital E",
    }
  ],
  '4990a698-afba-483b-5544-ecc5201e45c3': [
    {
      doctor_id: "4990a698-afba-483b-5544-ecc5201e45c3",
      name: "dr. Frank",
      specialization_id: "97ce4804-6508-4d65-dd33-70a3d14604ae",
      specialization_name: "Neurologist",
      hospital_id: "c279e92e-57c3-47ad-5656-397b4fe8b6f7",
      hospital_name: "Hospital F",
    }
  ]
};

Я хочу добавить ключ isExistScedule в массив. Ключ isExistSchedule получен из магазина vuex. В этом случае я покажу вам ExistScedule, который жестко закодирован, чтобы вы могли легче понять

Мой код, подобный следующему:

const newDoctors = {}
for (let item in doctors) {
  for (let i = 0; i < doctors[item].length; i++) {
    // const paramsSchedule = {
    //   hospitalId: doctors[item][i].hospital_id,
    //   doctorId: doctors[item][i].doctor_id
    // }
    // const promiseSchedule = this.getDataSchedule(paramsSchedule) // call vuex store and api
    // await promiseSchedule
    // const dataSchedule = this.dataSchedule.items
    // doctors[item][i].isExistSchedule = dataSchedule.isExistSchedule
    /* below I display the data statically so that you more easily understand */
    doctors['2bf169c6-bc51-4dc6-1234-cf81e611b6fd'][0].isExistSchedule = false
    doctors['d8e31868-ebec-4af0-4321-767aa696f91a'][0].isExistSchedule = true
    doctors['d8e31868-ebec-4af0-4321-767aa696f91a'][1].isExistSchedule = false
    doctors['0a24e765-3e3c-45e6-1122-8671eb3c0439'][0].isExistSchedule = true
    doctors['0a24e765-3e3c-45e6-1122-8671eb3c0439'][1].isExistSchedule = true
    doctors['4990a698-afba-483b-5544-ecc5201e45c3'][0].isExistSchedule = true

  }
  newDoctors[item] = doctors[item]
}

Я хочу, когда isExistScedule = false, он удалит элементы, которые находятся в группе

Итак, я хочу, чтобы конечный результат был таким:

var doctors = {
  'd8e31868-ebec-4af0-4321-767aa696f91a': [
    {
      doctor_id: "d8e31868-ebec-4af0-4321-767aa696f91a",
      name: "dr. Theo",
      specialization_id: "329de195-1ab6-4a43-3322-acfde447fec3",
      specialization_name: "Internal Medicine",
      hospital_id: "39764039-37b9-4176-4455-ef7b2e124ba4",
      hospital_name: "Hospital B"
    },
  ], 
  '0a24e765-3e3c-45e6-1122-8671eb3c0439': [
    {
      doctor_id: "0a24e765-3e3c-45e6-1122-8671eb3c0439",
      name: "dr. John",
      specialization_id: "5f8e2525-65fa-4a92-2312-fcd0323ad439",
      specialization_name: "General practitioners",
      hospital_id: "153b75ee-dc07-4290-2121-d4d28457780f",
      hospital_name: "Hospital D",
    },
    {
      doctor_id: "0a24e765-3e3c-45e6-1122-8671eb3c0439",
      name: "dr. John",
      specialization_id: "5f8e2525-65fa-4a92-2312-fcd0323ad439",
      specialization_name: "General practitioners",
      hospital_id: "153b75ee-dc07-4290-2121-d4d28457780f",
      hospital_name: "Hospital E",
    }
  ],
  '4990a698-afba-483b-5544-ecc5201e45c3': [
    {
      doctor_id: "4990a698-afba-483b-5544-ecc5201e45c3",
      name: "dr. Frank",
      specialization_id: "97ce4804-6508-4d65-dd33-70a3d14604ae",
      specialization_name: "Neurologist",
      hospital_id: "c279e92e-57c3-47ad-5656-397b4fe8b6f7",
      hospital_name: "Hospital F",
    }
  ]
};

Как мне сделать код, чтобы результат выглядел так?

Я попробовал, но это не сработало. этот случай действительно сложный

1 Ответ

0 голосов
/ 02 февраля 2020

вы можете использовать Array.prototype.filter для фильтрации элементов

let doctors = {
  '2bf169c6-bc51-4dc6-1234-cf81e611b6fd': [
    {
      doctor_id: '2bf169c6-bc51-4dc6-1234-cf81e611b6fd',
      name: 'dr. Benjamin',
      specialization_id: '5f8e2525-65fa-4a92-2312-fcd0323ad439',
      specialization_name: 'General practitioners',
      hospital_id: '63c6af56-bb9a-4962-6677-454d3345630d',
      hospital_name: 'Hospital A',
      isExistSchedule: false
    }
  ],
  'd8e31868-ebec-4af0-4321-767aa696f91a': [
    {
      doctor_id: 'd8e31868-ebec-4af0-4321-767aa696f91a',
      name: 'dr. Theo',
      specialization_id: '329de195-1ab6-4a43-3322-acfde447fec3',
      specialization_name: 'Internal Medicine',
      hospital_id: '39764039-37b9-4176-4455-ef7b2e124ba4',
      hospital_name: 'Hospital B',
      isExistSchedule: true
    },
    {
      doctor_id: 'd8e31868-ebec-4af0-4321-767aa696f91a',
      name: 'dr. Theo',
      specialization_id: '329de195-1ab6-4a43-3322-acfde447fec3',
      specialization_name: 'Internal Medicine',
      hospital_id: '65a60870-beab-4925-3322-4a5246e26d6a',
      hospital_name: 'Hospital C',
      isExistSchedule: false
    }
  ],
  '0a24e765-3e3c-45e6-1122-8671eb3c0439': [
    {
      doctor_id: '0a24e765-3e3c-45e6-1122-8671eb3c0439',
      name: 'dr. John',
      specialization_id: '5f8e2525-65fa-4a92-2312-fcd0323ad439',
      specialization_name: 'General practitioners',
      hospital_id: '153b75ee-dc07-4290-2121-d4d28457780f',
      hospital_name: 'Hospital D',
      isExistSchedule: true
    },
    {
      doctor_id: '0a24e765-3e3c-45e6-1122-8671eb3c0439',
      name: 'dr. John',
      specialization_id: '5f8e2525-65fa-4a92-2312-fcd0323ad439',
      specialization_name: 'General practitioners',
      hospital_id: '153b75ee-dc07-4290-2121-d4d28457780f',
      hospital_name: 'Hospital E',
      isExistSchedule: true
    }
  ],
  '4990a698-afba-483b-5544-ecc5201e45c3': [
    {
      doctor_id: '4990a698-afba-483b-5544-ecc5201e45c3',
      name: 'dr. Frank',
      specialization_id: '97ce4804-6508-4d65-dd33-70a3d14604ae',
      specialization_name: 'Neurologist',
      hospital_id: 'c279e92e-57c3-47ad-5656-397b4fe8b6f7',
      hospital_name: 'Hospital F',
      isExistSchedule: true
    }
  ]
}

let updatedDocs= Object.fromEntries(Object.entries({ ...doctors }).map(([key, value]) => ([key, [...value].filter(e => e.isExistSchedule)])).filter(e => e[1].length))

console.log(updatedDocs)

Использование простого for-loop

for (let doc in doctors) {
  let arr = [...doctors[doc].filter(item => item.isExistSchedule)];
  if(arr.length)
    UpdatedDocs[doc] = arr;
}

console.log(updatedDocs)
...