0

say I have list of objects retrieved from database and I'm iterating them through foreach loop in script bloc

export default {
  props: {
    guests: {
      type: Object,
      default: null,
    },
...
},
  computed: {
myGuests() {
      this.guests.forEach(guest => {
  // the if guest.age > than 18 condition should be here 
        const myGuests = JSON.parse(JSON.stringify(guest));
        // body of my method
      });
      return ...;
    },
},

I want to make a condition on it so if the age is greater than 18 I store them on another object, then when I call the method from template bloc the directive v-for should go through those elements (i.e guests whose age is greater than 18 (instead of going through all of guests with their different ages))

v-for="(guest, g) in myGuests" //call for the new created object whose age property is > 18
:key="g"
...

1 Answer 1

1

You can use filter in computed property:

Vue.component('Child', {
  template: `
    <div>
      <div v-for="(guest, g) in myGuests" :key="g">
        {{ guest.name }} - {{ guest.age }}
      </div>
    </div>
  `,
  props: {
    guests: {
      type: Array,
      default: null,
    },
  },
  computed: {
    myGuests() {
      return this.guests.filter(g => g.age > 18)
    }
  }
})

new Vue({
  el: '#demo',
  data() {
    return {
      guests: [{'name': 'aa', 'age': 15}, {'name': 'bb', 'age': 21}, {'name': 'cc', 'age': 18}, {'name': 'dd', 'age': 19}, {'name': 'ee', 'age': 20}, {'name': 'ff', 'age': 24}]
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
  <child :guests="guests"> </child>
</div>

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.