1

I'm building a portfolio with VueJs and would display projects with selected tags.

Here is my code:

<script lang="ts">
  import projectsData from "../projects.json"

  export default {
    
    data() {
        return {
          projects: projectsData,
          selectedTags: []
        }
      }
  }
</script>

<template>
  <div class="works">
    <h1> Discover my works </h1>
    <div class="tags-container"> 
      <input type="checkbox" id="web_dev" value="Web development" v-model="selectedTags">
      <label for="Web development">Web Development</label>

      <input type="checkbox" id="web_design" value="Web design" v-model="selectedTags">
      <label for="Web design">Web Design</label>
    </div>

    <div class="works-container">
      <div v-for="project in projects" :key="project.id" :tags="project.tags" :selected-tags="selectedTags" v-show="selectedTags == project.tags"  class="single-project"> {{ project.title }} </div>
    </div>
  </div>
</template>

I want to display project with this condition: if selectedTags equals my project tags so it displays it.

Even if my tags are equals, it doesn't display my project but I don't understand why ?

Can someone explain this to me?

Thanks

1 Answer 1

0

You cannot check content equality of two arrays with === (or ==) in Javascript. A condition like selectedTags == project.tags will only be true if both variables point to the same array instance.

You will have to check the elements individually:

selectedTags.length === project.tags.length && selectedTags.every(tag => project.tags.includes(tag))

const arr1 = [1,2,3]
const arr2 = [1,2,3]
const arr3 = arr1

console.log('Same content different instance is equal:', arr1 == arr2)
console.log('Same instance is equal:', arr1 == arr3)

const sameContent = arr1.length === arr2.length && arr1.every(tag => arr2.includes(tag))
console.log('Same elements in different instances:', sameContent)

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.