Как избавиться от полотна циклов

187
16 июня 2018, 08:20

У меня есть код. Большой, с вложенными циклами. Подскажите, как его можно сделать нормальным? Не думаю, что такое полотно - это нормально... Хотя бы куда копать

selectDoctor(doctorId) {
            for ( let counterClinic = 0; counterClinic < this.complexClinic.length; counterClinic++ ) {
                if ( this.complexClinic[counterClinic].id == this.doctorsListShow[0].clinicId ) {
                    if ( this.doctorsListShow[0].complex == 'specialization' ) {
                        let specializationsFor = this.complexClinic[counterClinic].specializations
                        for ( let counterSpecialization = 0; counterSpecialization < specializationsFor.length; counterSpecialization++ ) {
                            if ( specializationsFor[counterSpecialization].id == this.doctorsListShow[0].specializationId ) {
                                let doctorsFor = specializationsFor[counterSpecialization].doctors
                                for ( let counterDoctor = 0; counterDoctor < doctorsFor.length; counterDoctor++ ) {
                                    doctorsFor[counterDoctor].select = false
                                    specializationsFor[counterSpecialization].cost = 0
                                    if ( doctorsFor[counterDoctor].id == doctorId ) {
                                        doctorsFor[counterDoctor].select = true
                                        specializationsFor[counterSpecialization].select = true
                                        specializationsFor[counterSpecialization].cost = doctorsFor[counterDoctor].cost
                                        break
                                    }
                                }
                            }
                        }
                    }
                    if ( this.doctorsListShow[0].complex == 'instrumental' ) {
                        let instrumentalsFor = this.complexClinic[counterClinic].instrumentals
                        for ( let counterSpecialization = 0; counterSpecialization < instrumentalsFor.length; counterSpecialization++ ) {
                            if ( instrumentalsFor[counterSpecialization].id == this.doctorsListShow[0].specializationId ) {
                                let doctorsFor = instrumentalsFor[counterSpecialization].doctors
                                for ( let counterDoctor = 0; counterDoctor < doctorsFor.length; counterDoctor++ ) {
                                    doctorsFor[counterDoctor].select = false
                                    instrumentalsFor[counterSpecialization].cost = 0
                                    if ( doctorsFor[counterDoctor].id == doctorId ) {
                                        doctorsFor[counterDoctor].select = true
                                        instrumentalsFor[counterSpecialization].select = true
                                        instrumentalsFor[counterSpecialization].cost = doctorsFor[counterDoctor].cost
                                        break
                                    }
                                }
                            }
                        }
                    }
                    break
                }
            }
            console.log(this.complexClinic)
            this.doctorsListShow = []
        },
Answer 1

Предлагаю такую архитектуру. Я не всё здесь сделал правильно, но суть, я думаю, показал

// объявляем класс используемой сущности
class Clinic {
    // в ней определяем методы по поиску этих сущностей
    static getById(id) {
    return clinics.filter(clinic => clinic.id === id)[0];
  }
  static getByName(name) {
    return clinics.filter(clinic => clinic.name === name)[0];
  }
  constructor(id, name) {
    // свойства клиники
    this.id = id;
    this.name = name;
  }
}
// список клиник
const clinics = [];
// заполняем
clinics.push(new Clinic(1, 'Central #1'), new Clinic(2, 'Central #2'));
// ищем...
const clinic = Clinic.getById(id);
// В том же дуже остальные сущности
READ ALSO
Как задать цвет :after у элемента?

Как задать цвет :after у элемента?

У меня есть скрипт выбора цвета, который задает цвет нужного элемента:

178
Использование JS и SVG

Использование JS и SVG

Вопрос касается JS + SVGДолго думал сюда написать, но уже несколько дней не могу найти решение, прошу помочь разобраться

197
Есть ли обработчик события Click у элемента?

Есть ли обработчик события Click у элемента?

Подвесил на кнопку Next слайдера Slick свой обработчик события ClickОн срабатывает один раз, а потом перестает

172
socket io как реализовать валидность данных [закрыт]

socket io как реализовать валидность данных [закрыт]

Создаю игру на node jsВ качестве соединения использую socket io

133