Vue.js 过滤出Vue中的重复数据

Vue.js 过滤出Vue中的重复数据,vue.js,vuejs2,vuetify.js,vue-filter,Vue.js,Vuejs2,Vuetify.js,Vue Filter,如何过滤列表中的重复标记,使每个标记中只列出一个 以下是我的组件代码: <template> <v-layout row wrap> <ul> <li v-for="post in sortByName(posts)" :key="post.key"> <v-chip v-for="i in sortByName(post.tags)" :key="i.key

如何过滤列表中的重复标记,使每个标记中只列出一个

以下是我的组件代码:

  <template>
    <v-layout row wrap>

    <ul>
      <li v-for="post in sortByName(posts)" :key="post.key">
       <v-chip
         v-for="i in sortByName(post.tags)"
         :key="i.key"
         :color="`${i.color} lighten-3`"
         label
         small
       >
          <span class="pr-2">
            {{ i.text }}
          </span>
        </v-chip>
      </li>
    </ul>

  </v-layout>
  </template>

  <script>
    import { mapState } from 'vuex'
    const fb = require('../firebaseConfig.js')

    export default {
      data: () => ({

      }),
      computed: {
        ...mapState(['posts'])
    },
    methods: {
      // function to put the tags in the right order to a -> z
      sortByName (list) {
        return _.orderBy(list, 'text', 'asc');
      }
     }
    }
  </script>

  • {{i.text}}
从“vuex”导入{mapState} const fb=require('../firebaseConfig.js') 导出默认值{ 数据:()=>({ }), 计算:{ …映射状态(['posts'])) }, 方法:{ //函数将标签按正确顺序放置到a->z sortByName(列表){ 返回u.orderBy(列表,'text','asc'); } } }
例如,在下面的屏幕截图中,我想过滤掉
海滩
,以便在列表中只看到
海滩

数据如下所示:

一种解决方案是使用一个返回
帖子的新列表(例如,
filteredPosts
)并过滤其
标记的
数组。在下面的示例中,computed属性中的缓存用于跟踪标记。计算处理程序
this.posts[]
到一个新的
数组中
和每个条目的
标记[]
,跟踪缓存中的新标记为“已看到”,并删除已“已看到”的标记

模板:

newvue({
el:“#应用程序”,
数据(){
返回{
职位:[
{
重点:1,,
标签:[
{颜色:'蓝色',文字:'天空'},
{颜色:'绿色',文字:'树'},
{颜色:'黄色',文字:'海滩'},
],
},
{
重点:二,,
标签:[
{颜色:'紫色',文字:'葡萄'},
{颜色:'红色',文字:'苹果'},
{颜色:'橙色',文字:'橙色'},
],
},
{
重点:三,,
标签:[
{颜色:'蓝色',文字:'蓝莓'},
{颜色:'黄色',文字:'海滩'},
],
},
{
重点:四,,
标签:[
{颜色:'粉色',文字:'花朵'},
{颜色:'黄色',文字:'海滩'},
],
},
]
};
},
方法:{
//函数将标签按正确顺序放置到a->z
sortByName(列表){
返回u.orderBy(列表,'text','asc');
},
},
计算:{
过滤柱(){
const tagCache={};
//将“posts”映射到新的筛选数组
//删除重复标签
const newPosts=this.posts.map(post=>{
返回{
邮递
标记:post.tags.filter(标记=>{
const seen=tagCache[tag.text];
tagCache[tag.text]=true;
回来!看见了;
})
};
});
返回新职位;
}
}
})
@import'https://unpkg.com/vuetify@1.1.9/dist/vuetify.min.css'

  • {{i.text}}
一种解决方案是使用一个返回
帖子的新列表(例如,
filteredPosts
)并过滤其
标记的
数组。在下面的示例中,computed属性中的缓存用于跟踪标记。计算处理程序
this.posts[]
到一个新的
数组中
和每个条目的
标记[]
,跟踪缓存中的新标记为“已看到”,并删除已“已看到”的标记

模板:

newvue({
el:“#应用程序”,
数据(){
返回{
职位:[
{
重点:1,,
标签:[
{颜色:'蓝色',文字:'天空'},
{颜色:'绿色',文字:'树'},
{颜色:'黄色',文字:'海滩'},
],
},
{
重点:二,,
标签:[
{颜色:'紫色',文字:'葡萄'},
{颜色:'红色',文字:'苹果'},
{颜色:'橙色',文字:'橙色'},
],
},
{
重点:三,,
标签:[
{颜色:'蓝色',文字:'蓝莓'},
{颜色:'黄色',文字:'海滩'},
],
},
{
重点:四,,
标签:[
{颜色:'粉色',文字:'花朵'},
{颜色:'黄色',文字:'海滩'},
],
},
]
};
},
方法:{
//函数将标签按正确顺序放置到a->z
sortByName(列表){
返回u.orderBy(列表,'text','asc');
},
},
计算:{
过滤柱(){
const tagCache={};
//将“posts”映射到新的筛选数组
//删除重复标签
const newPosts=this.posts.map(post=>{
返回{
邮递
标记:post.tags.filter(标记=>{
const seen=tagCache[tag.text];
tagCache[tag.text]=true;
回来!看见了;
})
};
});
返回新职位;
}
}
})
@import'https://unpkg.com/vuetify@1.1.9/dist/vuetify.min.css'

  • {{i.text}}

只需根据您的要求在访问原始数据的计算变量中对列表进行筛选和排序即可。然后,computed语句的返回值就是要显示的列表。在模板中,您然后迭代这个计算变量。是的,好的,那看起来怎么样?您的数据看起来怎么样?只需在访问原始数据的计算变量中根据您的要求对列表进行筛选和排序。然后,computed语句的返回值就是要显示的列表。在模板中,您然后迭代这个计算变量。是的,好的,这看起来怎么样
<li v-for="post in filteredPosts" :key="post.key">