Повторите вложенный объект с циклом for

#javascript

#язык JavaScript

Вопрос:

как я могу получить значения вложенного объекта в цикле? Мне нужно пройти через оба уровня:

 for (let unit in ds1.units) {   for (let ports in ds1.units[unit].switchPorts) {  console.log(ports)  } }  

}

Объект выглядит так: На экране нет вывода. Когда я получаю доступ к значению с ds1.units[unit].switchPorts помощью, я его получаю. Также я получаю unit после первого цикла for.

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

1. Опубликуйте объект ввода в виде фактического кода (рисунок бесполезен) и опубликуйте то, что вы ожидаете, и то, что вы на самом деле получаете.

Ответ №1:

Вы не можете повторять объект по умолчанию.
Следовательно, существует несколько способов, но я предпочитаю конвертировать ключ в массив. Таким образом, код будет:

 for (let unit of Object.keys(ds1.units)) {   console.log(ds1.units[unit].switchPorts) }  

Также мы собираемся использовать of вместо in «потому of что», чтобы получить значение вместо индекса.

Для тестового случая:

  ds1 = {  units: {  1: {  switchPorts: 5,  },  2: {  switchPorts: 6,  }  } }   for (let unit of Object.keys(ds1.units)) {   console.log(ds1.units[unit].switchPorts) }  

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

1. Это приводит к исключению: Неперехваченная ошибка типа: Не удается прочитать свойства неопределенного (чтение «переключаемых портов»).

2. Вы уверены, что передаете тот же объект, что и снимок экрана? Это работает на моей стороне. запустите код тестового примера, который я предоставил

3. Я подозреваю, что вы получаете это с сервера? и вы пытаетесь получить доступ еще до получения данных? потому что это никоим образом не определено, если переменная не определена изначально

4. Извините, что я допустил опечатку в функции. Ваш код работает совершенно нормально. Спасибо за объяснение и код!