json - Javascript にオブジェクト キーがない場合に未定義エラーをスキップする

okwaves2024-01-25  7

キーが見つからない場合にスローされる未定義エラーをスキップする方法を知りたいです。

[
  {
    "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 番目のオブジェクトに subThemes キーがないため、エラーが発生します。

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

TypeError: Cannot read property 'map' of undefined

未定義エラーを回避するにはどうすればよいですか?よろしくお願いします。

コードとエラーを投稿してください

– user969068

2020 年 9 月 3 日 11:04

map 関数を使用してどのように実装したかを示していただけますか?

– elpmid

2020 年 9 月 3 日 11:04

@user969068 が切り取ったコードを追加しました

– アディティヤ シュクラ

2020 年 9 月 3 日 11:07

条件付き連鎖 (theme.subThemes?.map(..)) を使用できます。

– イェヴヘン・ホルブンコフ

2020 年 9 月 3 日 11:08

@YevgenGorbunkov スロー構文エラー: 予期しないトークン

– アディティヤ シュクラ

2020 年 9 月 3 日 11:10



------------------------

それはどう聞こえますか?

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

または空の配列を返す場合 (ES6 構文)

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

または、エラーを発生させずに未定義を返す場合 (ES6 構文)

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

0

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。