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は同時に使わない。

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