Замена пары ключ-значение новой парой ключ-значение внутри вложенного объекта

#javascript #object #replace #nested

Вопрос:

У меня возникли проблемы с эффективной идентификацией / заменой значения, которое мне нужно внутри объекта для приложения для редактирования ставок оплаты.

 
    {
        Physicians: {
          telehealth: {
            orgName: "ORG B",
            weekdayEncounters: { type: "each", value: 15 },
            weeknightEncounters: { type: "each", value: 16.25 },
            weekendDayEncounters: { type: "each", value: 16.25 },
            weekendNightEncounters: { type: "each", value: 17.25 },
            holidayEncounters: { type: "each", value: 17.25 },
            stipend: { type: "lump", value: 0 },
          },
        },
        NonPhysicians: {
          telehealth: {
            orgName: "ORG B",
            weekdayEncounters: { type: "each", value: 15 },
            weeknightEncounters: { type: "each", value: 16.25 },
            weekendDayEncounters: { type: "each", value: 16.25 },
            weekendNightEncounters: { type: "each", value: 17.25 },
            holidayEncounters: { type: "each", value: 17.25 },
            stipend: { type: "lump", value: 0 },
          },
        },
        date: "07-2021",
        orgName: "ORG B",
        ltc: false,
      }

 

Я ищу замену value внутри самого глубокого объекта в зависимости от редактируемого поля. На данный момент я просто продолжаю получать все более и более запутанный код, пытаясь проникнуть в объект, прочитать его, а затем заменить правильное значение. У меня есть пример, приведенный здесь. Пожалуйста, успокойтесь, я все еще учусь. Совет был бы весьма признателен.В настоящее время моя проблема заключается в том, что я возвращаю массив, полный неопределенных значений, а затем один объект, который мне нужен. Заранее спасибо.

Ответ №1:

Я вошел в ваш пример и взял объект верхнего уровня ‘NEWRATES’. Приведенный ниже пример кода проходит через каждый из подобъектов NEWRATES[‘ltc’][0][‘Infinity’][‘Physicians’][‘associates’] и выводит значение под ключом ‘value’. Он также выполняет быструю проверку типа, поскольку самый низкий уровень содержит некоторые ключи, которые сопоставляются со строками, например (OrgName: «Бесконечность»).

Вызов функции Object.entries необходим, чтобы сделать указанный объект NEWRATES[…] итеративным.

 for( let [key,value] of Object.entries(NEWRATES["ltc"][0]['Infinity']['Physicians']['associates']) ){
    if(typeof value == "object"){
        console.log('value is: '   value.value);
    }
}
 

Этого должно быть достаточно, чтобы вы снова начали. Просто замените ключи верхнего уровня из ‘ltc’ -> ‘standard’, ‘Physicians’ -> ‘NonPhysicians’, чтобы выполнить итерацию по другим частям объекта верхнего уровня.