javascript - 在Vue中通过满足特定条件的嵌套值过滤数组
问题描述
我正在尝试过滤包含嵌套对象数组的数组。我希望 v-for 只显示那些满足特定条件的对象。我创建了一个 JSfiddle点击这里
让我困惑的部分是每个参与可能有 1 个对象或 3 个对象,我不知道如何检查每个嵌套对象的值条件。
我只想显示未回答问题的参与。我使用布尔值来表示问题是否得到回答。
这是 v-for
<div id="app">
<h2>Engagements:</h2>
<div>
<div v-for="(engagment, index) in filteredQuestions" :key="index">
<li v-for="question in engagment.questions" :key="question.id">
<span>{{ question.id }},</span>
<span> {{ question.question}} </span>
<span><input type="checkbox" v-model="question.answered"></span>
</li>
</div>
</div>
</div>
这是脚本和数据
new Vue({
el: "#app",
data: {
engagements: [
{
id: 1,
text: "1040",
questions: [
{
id: 1,
question: 'this is a question',
answered: 0
},
{
id: 2,
question: 'this is a question',
answered: 1
},
]
},
{
id: 2,
text: "1040",
questions: [
{
id: 3,
question: 'this is a question',
answered: 0
},
]
},
]
},
computed: {
filteredQuestions() {
const engagement = this.engagements.filter((engagement) => {
return engagement.questions.filter((question) => question.answered === 0)
})
return engagement
}
}
})
目前,无论我如何格式化该filteredQuestions
方法,它都会呈现整个列表或不显示任何内容。请查看我在这篇文章顶部包含的 jsfiddle!
解决方案
您正在过滤engagements
基于他们有 1 个或多个未回答的问题,但v-for
仍然在这些参与中呈现所有问题。
错误:添加 v-if="question.answered==0"
到<li>
元素以仅显示未回答的问题。(这是错误的做法,我发现:see lint error here。你不应该在同一个元素上使用v-if
和。)v-for
正确:
在这种情况下,将您的filteredQuestions
计算值函数扩展为只返回questions
没有答案。(现在您只是基于此过滤参与,但仍返回所有问题。)
您的计算值函数可能是:
filteredQuestions() {
return this.engagements
// Return a modified copy of engagements..
.map((engagement) => {
// ..with all answered questions filtered out..
engagement.questions = engagement.questions.filter((question) => question.answered === 0);
return engagement;
})
// ..and only return engagements that have (unanswered) questions left
.filter((engagement) => engagement.questions.length !== 0);
}
推荐阅读
- flutter - Flutter:从 Instagram 帖子中获取照片/视频并显示为水平列表视图
- python - AttributeError:“文本”对象没有用于 sns 混淆矩阵的属性“yaxis”
- java - Java/JDBC MySQL 连接错误 - “用户''@'localhost' 的访问被拒绝(使用密码:否)”时区转储?
- google-chrome-extension - 如何捕获 PageStateMatcher 的结果并将其发送到 content.js
- spring-boot - 将 HttpServletRequest 作为方法参数传递时,Springdoc 招摇是不可能的吗?
- class - 使用该类中的数据来渲染小部件的方法是一种很好的 Flutter 实践吗?
- c++ - 重载类方法的模糊调用
- r - 自动化 R 中的多重/嵌套线性回归 - 嵌套 PLYR
- azure-functions - Azure App Service Plan for Function Apps 的区别:Elastic Premium EP1 和 Premium V2 P1v2
- python-3.x - 如何将“conftest,py”中的参数传递给测试文件(pytest)?