Пропустить неопределенную ошибку, если в Javascript отсутствует ключ объекта

#javascript #json #reactjs

#javascript #json #reactjs

Вопрос:

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

 [
  {
    "id": "foo1",
    "name": "Test1",
    "description": "random test1",
    "languages": [
      "en"
    ],
    "subThemes": [
      {
        "id": "1",
        "name": "Bike"
      },
      {
        "id": "2",
        "name": "Testy",
        "description": "Testing this thing1"
      }
    ]
  },
  {
    "id": "foo2",
    "name": "Test",
    "description": "random test2",
    "languages": [
      "en"
    ],
    "subThemes": [
      {
        "id": "3",
        "name": "Bike2"
      },
      {
        "id": "4",
        "name": "Testy2",
        "description": "Testing this thing2"
      }
    ]
  },
  {
    "id": "foo3",
    "name": "Test3",
    "description": "random test3",
    "languages": [
      "en"
    ]
  }
]
  

Допустим, у меня есть объект массива, подобный этому выше, если я создам над ним карту, это выдаст мне ошибку, потому что у меня нет ключа подтемы в 3-м объекте.

 const children = theme.subThemes
      .map(subTheme => {
        const { subThemes = [] } = aggregations;  
              ...rest of the code}

TypeError: Cannot read property 'map' of undefined
  

Как мне обойти неопределенную ошибку? Заранее спасибо.

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

1. опубликуйте свой код и ошибку

2. можете ли вы показать, как вы реализовали это с помощью функции map?

3. Добавлен сокращенный код @user969068

4. Вы можете использовать условную цепочку ( theme.subThemes?.map(.. )

5. @EVGENGORBUNKOV Выдает синтаксическую ошибку: неожиданный токен

Ответ №1:

как это звучит?

 if ( Array.isArray(myJson.languages))
     myJson.languages.map(.....
  

или для возврата пустого массива (синтаксис ES6)

 (myJson.languages || []).map(x => { .... });
  

или для возврата неопределенного без ошибки (синтаксис ES6)

 myJson.languages?.map(x => { ... });