@kmv-dev

Как отфильтровать v-for по условию сравнения значений с другого массива?

<template>
    <div class="home" v-for="station of stations" :key="station.id" >
        <h1>{{ station.name }}</h1>
        <ul>
            <li v-for="car of car_filter" :key="car.id">{{ car.name }}</li>
        </ul>
    </div>
</template>

<script>
const axios = require('axios');

export default {
    name: 'Home',
    data() {
        return {
            stations: [],
            cars: []
        }
    },
    mounted() {
        Promise.all([
            axios.get(`http://localhost:3000/stations`),
            axios.get(`http://localhost:3000/cars`)
        ]).then(([stations, cars]) => {
            this.stations = stations.data;
            this.cars = cars.data;
        });
    },
    computed: {
        car_filter: function () {
            return this.cars.filter( function () {
                return this.stations.name === this.cars.address;  ----- такая конструкция не работает
            })
        }
    }
}
</script>


в db.json создал двумерный массив с данными. Во втором массиве из 2х добавил ключ с значением которое встречается в первом массиве чтобы потом сравнить их и выводить только данные которые совпали.
Подскажите как вывести только тот car.name который прошел проверку stations.name === cars.address?
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
computed: {
  stationsWithCars() {
    return this.cars.reduce(
      (acc, n) => (acc[n.address]?.cars.push(n), acc),
      Object.fromEntries(this.stations.map(n => [ n.name, { station: n, cars: [] } ]))
    );
  },
},

<div v-for="{ station, cars } in stationsWithCars" :key="station.id">
  <h1>{{ station.name }}</h1>
  <ul>
    <li v-for="car in cars" :key="car.id">{{ car.name }}</li>
  </ul>
</div>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы