Изменить только одно значение в глубоком объекте

#javascript

#javascript

Вопрос:

Я столкнулся с проблемой манипулирования объектом. Я хочу изменить значение ключа, но я не знаю, как изменить это значение, не зная значения родительского объекта.

Мой пример будет говорить за меня.

Мой объект выглядит так :

 {day: {
   monday: {
      startTime: 2, 
      endTime: 1
  }
}}
  

Я хочу изменить значение «startTime», я знаю, что могу сделать :

 {day: {monday:{starTime: [value]}}}
  

Но проблема в том, что я не знаю второго ключа (это может быть любой день недели). Нравится

 {know: {
    unknow: {
        know: valueToChange
    }
}}
  

Вы знаете трюк для этого?

Комментарии:

1. Будет ли в этом объекте только одно свойство?

2. Нет, это может быть от 1 до 7, и я этого тоже не знаю

3. Итак, если их 7, какое из них вы хотите изменить? Все из них?

4. Это было только для одного, @Evgency дайте мне решение, спасибо 🙂

Ответ №1:

Вы можете просмотреть все значения там и изменить каждое по итерации:

 const data = {
  day: {
    monday: {
      startTime: 2, 
      endTime: 1
    },
    tuesday: {
      startTime: 2, 
      endTime: 1
    }
  }
}

Object.keys(data.day).forEach(key => {
  data.day[key].startTime = 10 // some known value
})

console.log(data)  

Таким образом, вы можете изменить их все или проверить, есть ли какой-то конкретный ключ, который вы хотите изменить, если вы не хотите изменять их все

Ответ №2:

Это также может быть одним из многих решений.Мы можем использовать рекурсию

 let data = {
            day: {
                monday: {
                    startTime: 1,
                    endTime: 1
                }
            }
        };

        function getStartTime(data) {
            if (data.startTime) {
                data.startTime = 6;
            } else {
                getStartTime(Object.values(data)[0]);
            }
        }
        getStartTime(data);
        console.log(data);