リストデータのオブジェクト操作

date
Mar 14, 2023
repo_url
slug
list-objmap
status
Published
summary
type
Post
thumbnail_url
tags
vue
outer_link
オブジェクトを要素とするMapに対しても以下のように操作を行うことができる。
<script setup lang="ts">
import {ref, computed} from "vue";

const cocktailDataListInit = new Map<number, Cocktail>();
cocktailDataListInit.set(2345, {id: 2345, name: "ホワイトレディ", price: 1200});
cocktailDataListInit.set(4412, {id: 4412, name: "ブルーハワイ", price: 1500});
cocktailDataListInit.set(6792, {id: 6792, name: "ニューヨーク", price: 1100});
cocktailDataListInit.set(8429, {id: 8429, name: "マティーニ", price: 1500});
const cocktailDataList = ref(cocktailDataListInit);

//算出関数。戻り値の型はMap
const cocktail1500 = computed(
	(): Map<number, Cocktail> => {
		//絞り込んだ要素を格納する新しいMapを用意
		const newList = new Map<number, Cocktail>();
		cocktailDataList.value.forEach(
   //第1引数がMapの各要素の値、第2引数がキー
			(value: Cocktail, key: number): void => {
				//カクテルの価格が1500円ならnewListに登録
				if(value.price == 1500) {
					newList.set(key, value);
				}
		});
		//絞り込んだ新しいMapを戻り値とする
		return newList;
	}
);
const changeWhiteLadyPriceInList = (): void => {
	const whiteLady = cocktailDataList.value.get(2345) as Cocktail;
	whiteLady.price = 1500;
};

interface Cocktail {
	id: number;
	name: string;
	price: number;
}
</script>

<template>
	<section>
		全てのカクテルリスト
		<ul>
			<li
				v-for="[id, cocktailItem] in cocktailDataList"
				v-bind:key="id">
				{{cocktailItem.name}}の値段は{{cocktailItem.price}}円
			</li>
		</ul>
	</section>
	<section>
		値段が1500円のカクテルリスト
		<ul>
			<li
				v-for="[id, cocktailItem] in cocktail1500"
				v-bind:key="'cocktail1500' + id">
				{{cocktailItem.name}}の値段は{{cocktailItem.price}}円
			</li>
		</ul>
	</section>
	<p>
		CocktailDataList内のホワイトレディの価格を1500円に
		<button v-on:click="changeWhiteLadyPriceInList">変更</button>
	</p>
</template>

© Hayato Kamiyama 2023 - 2024 - Build with Next.js & Notion