gpt4 book ai didi

javascript - 如何在VueJS中按对象属性过滤对象数组

转载 作者:行者123 更新时间:2023-12-03 06:46:59 29 4
gpt4 key购买 nike

我想打印出时间 session 在 20 小时后或同一天开始的电影。无论哪种方式,我都无法让它工作。

组件数据结构:

day:"2017-06-08T18:34:27.211Z"
movies:Array[8]
0:Object
Description:"orphan the becomes a famous magician "
id:1
movieName:"Harry Potter "
time_session:Array[3]
0:Object
id:1
pivot:Object
time:"2017-06-14 00:00:00"
1:Object
2:Object
1:Object
2:Object
3:Object
4:Object

模板:
<template>
<div>
<li v-for="movie in filteration(movies)">{{movie.movieName}}</li>
</div>
</template>

如何过滤电影,以便显示的电影取决于同一对象中的时间 session ?

这是我尝试过的:
<script>
export default{
data() {
return {
movies:[],
day:moment()
}
},
mounted(){
axios.get("/fa")
.then(response => this.movies = response.data);
},
methods:{
filteration(movie){
return movie.filter(this.time);
},
time(movie){
return moment(movie.time_session.time).hour() > 20;
// return moment(movie.time_session.time).isSame(this.day,'day');
}
}
}
</script>

最佳答案

您遇到问题的最可能原因是您正在通过 movie.time_session.timemoment .但是,movie.time_session是一个 session 数组,没有 time属性(property)。您可能需要比较 time_session 的每个元素的时间大批。

通常,在 Vue 中显示过滤数据数组的最佳方法是创建一个计算属性来过滤数据并返回它。

在您的情况下,您可以创建一个计算属性 filteredMovies返回过滤后的电影并在您的模板中使用它:

computed: {
filteredMovies() {
return this.movies.filter((movie) => {
return movie.time_session.reduce((acc, session) => {
return acc || (moment(session.time).hour() > 20);
}, false);
});
}
}

然后,在您的模板中,引用 filteredMovies像这样:
<li v-for="movie in filteredMovies">{{movie.movieName}}</li>

关于javascript - 如何在VueJS中按对象属性过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44444455/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com