APIレスポンスを画面表示用に整える理由
APIのデータをそのまま画面へ渡すのではなく、表示対象だけを取り出し、画面で必要な項目に変換すると、描画側の処理をシンプルにできます。例えば商品一覧なら、販売中の商品だけを残し、商品名・価格・画像URLだけを表示用データにします。処理の流れは、filter()で対象を絞る →map()で表示用に変換する、という形です。
サンプルのAPIレスポンスを確認する
次の配列は説明用のサンプルです。実際のAPIでは、プロパティ名やレスポンスの階層が異なる場合があります。
const products = [
{ id: 1, name: "ワイヤレスマウス", price: 2980, isActive: true, imageUrl: "/images/mouse.jpg" },
{ id: 2, name: "キーボード", price: 5980, isActive: false, imageUrl: "/images/keyboard.jpg" },
{ id: 3, name: "USBハブ", price: 1980, isActive: true, imageUrl: "/images/hub.jpg" },
];
// isActive が true の商品を表示対象にするfilter()で表示対象のデータだけを残す
filter()は、条件に合格した要素だけを含む新しい配列を作ります。販売中の商品だけを残す場合は、各要素のisActiveを確認します。
const activeProducts = products.filter((item) => item.isActive);
console.log(activeProducts);
// 期待される形:
// [
// { id: 1, name: "ワイヤレスマウス", price: 2980, isActive: true, imageUrl: "/images/mouse.jpg" },
// { id: 3, name: "USBハブ", price: 1980, isActive: true, imageUrl: "/images/hub.jpg" }
// ]filter()は元の配列を直接書き換えません。条件をitem.price < 5000のように変更すれば、価格帯による絞り込みにも応用できます。
map()でAPIデータを表示用の形に変換する
map()は、配列の各要素を変換し、その結果から新しい配列を作ります。APIのnameを画面用のtitleに変更したり、価格を表示用の文字列にしたりできます。
const displayProducts = products.map((item) => ({
id: item.id,
title: item.name,
priceText: `${item.price}円`,
imageUrl: item.imageUrl,
}));
console.log(displayProducts);
// 期待される形:
// [
// { id: 1, title: "ワイヤレスマウス", priceText: "2980円", imageUrl: "/images/mouse.jpg" },
// ...
// ]filter()とmap()をつないで表示用データを作る
実務では、filter()とmap()をメソッドチェーンでつなぐと、対象の絞り込みから表示用データへの変換までを一度に表現できます。
const displayProducts = products
.filter((item) => item.isActive)
.map((item) => ({
id: item.id,
title: item.name,
price: item.price,
imageUrl: item.imageUrl,
}));
console.log(displayProducts);
// 期待される結果:
// [
// { id: 1, title: "ワイヤレスマウス", price: 2980, imageUrl: "/images/mouse.jpg" },
// { id: 3, title: "USBハブ", price: 1980, imageUrl: "/images/hub.jpg" }
// ]先にfilter()を実行するため、表示しない商品に対してmap()の変換を行わずに済みます。途中結果を確認したい場合や条件が複雑な場合は、filter()とmap()を別々の変数に分けると読みやすくなります。
変換した配列を画面表示へ渡す
変換後の配列は、画面側のループ処理やUIコンポーネントへ渡します。描画方法はブラウザ標準JavaScript、Reactなどのフレームワークによって異なるため、配列変換と描画処理を分けて考えると管理しやすくなります。
displayProducts.forEach((product) => {
console.log(`${product.title}: ${product.price}円`);
// 期待される表示例:
// ワイヤレスマウス: 2980円
// USBハブ: 1980円
});APIデータを変換するときの注意点
- レスポンスが配列そのものではなく、
response.dataやresponse.itemsの配下にある場合は、対象の配列を取り出してから処理する。 - isActive、name、priceなどのプロパティが実際に存在するか、API仕様を確認する。
- プロパティが欠けている場合の表示値や、画像URLが空の場合の代替画像を設計する。
- 空配列、通信エラー、ローディング中に画面へ何を表示するかは、配列変換とは別に決める。
- filter()は抽出、map()は変換という役割を分けると、処理内容を読みやすく保ちやすい。