Logo
ページの隅々まで

Type Script ネストしたオブジェクトの階層を変換する

2024年7月08日2024年7月08日

こんなJsonがあったとする

const food: GroupedFood[] = [
  {
    group: "ご飯",
    detail: [
      {
        date: "2024",
        name: "お米",
      },
      {
        date: "2023",
        name: "ラーメン",
      },
    ]
  },
  {
    group: "デザート",
    detail: [
      {
        date: "2024",
        name: "ケーキ",
      },
      {
        date: "2023",
        name: "アイス",
      },
    ]
  },
];

interface Detail {
  date: string;
  name: string;
}

interface GroupedFood {
  group: string;
  detail: Detail[];
}

interface FlattenedFood {
  group: string;
  date: string;
  name: string;
}

flatMapとmap

groupのkey-valueをdetailの中の値として変換したい場合は、

flatMapmapを使用して、グループ化されたデータをフラット化し、各詳細情報を個別のオブジェクトとして新しい配列に変換します。これにより、指定された変換が効率的に実行されます。

const transformFoodData = (groupedFood: GroupedFood[]): FlattenedFood[] => {
  return groupedFood.flatMap(group => 
    group.detail.map(detail => ({
      group: group.group,
      date: detail.date,
      name: detail.name
    }))
  );
};

// 変換処理の実行
const transformedFood = transformFoodData(food);

console.log(transformedFood);

実行結果

[
  {
    "group": "ご飯",
    "date": "2024",
    "name": "お米"
  },
  {
    "group": "ご飯",
    "date": "2023",
    "name": "ラーメン"
  },
  {
    "group": "デザート",
    "date": "2024",
    "name": "ケーキ"
  },
  {
    "group": "デザート",
    "date": "2023",
    "name": "アイス"
  }
]

関連タグ

他の記事

もっと見る

PR

PR

PR

PR