filter()でループ対象のデータを絞り込む
date
Mar 13, 2023
repo_url
slug
vfor-filter
status
Published
summary
type
Post
thumbnail_url
tags
vue
outer_link
filterおさらい
配列内の条件に合致した新たな配列を生成するメソッド。
新しく生成された配列はシャロ―コピーになるので、コピー元のオブジェクトとプロパティの参照は同じになる。
ループ対象データの絞り込み例
<script setup lang="ts">
import { ref, computed } from 'vue';
const cocktailDataListInit: Cocktail[] = [
{ id: 2345, name: 'ホワイトレディ', price: 1200 },
{ id: 4412, name: 'ブルーハワイ', price: 1500 },
{ id: 6792, name: 'ニューヨーク', price: 1100 },
{ id: 8429, name: 'マティーニ', price: 1500 },
];
const cocktailDataList = ref(cocktailDataListInit);
const cocktail1500 = computed((): Cocktail[] => {
//filter()メソッドを使って新たな配列を生成
//引数は配列の各要素であるCocktailオブジェクト
const newList = cocktailDataList.value.filter(
(cocktailItem: Cocktail): boolean => {
//値段が1500かどうかの結果を戻り値とする。
return cocktailItem.price == 1500;
}
);
return newList;
});
interface Cocktail {
id: number;
name: string;
price: number;
}
</script>
<template>
<section>
全てのカクテルリスト
<ul>
<li v-for="cocktailItem in cocktailDataList" v-bind:key="cocktailItem.id">
{{ cocktailItem.name }}の値段は{{ cocktailItem.price }}円
</li>
</ul>
</section>
<section>
値段が1500円のカクテルリスト
<ul>
<li
v-for="cocktailItem in cocktail1500"
v-bind:key="'cocktail1500' + cocktailItem.id"
>
{{ cocktailItem.name }}の値段は{{ cocktailItem.price }}円
</li>
</ul>
</section>
</template>
v-forとv-ifを同時に使わない
Vueのスタイルガイドにあるように、v-forとv-ifは同時に使わない。