我在JavaScript并不是最好的,但是我遇到了一个复杂的挑战,我很难弄清楚。
我需要完成以下三件事:
下面是我的HTML模板:
<div id="app">
<div>
<table>
<tr>
<th>Office</th>
<th>Number of Unresolved Issues</th>
</tr>
<tr v-for="office in unresolvedIssues" :key="office.issueId">
<td>{{office.office}}</td>
<td></td>
</tr>
</table>
</div>
</div>然后我的Vue密码:
new Vue({
el: "#app",
data: {
unresolvedIssues: [
{ issueId: "12345", status: 7, office: "blue" },
{ issueId: "56781", status: 7, office: "orange" },
{ issueId: "23145", status: 7, office: "red" },
{ issueId: "12311", status: 7, office: "blue" },
{ issueId: "33144", status: 7, office: "orange" },
{ issueId: "33244", status: 7, office: "yellow" },
],
offices: [
{ office: 'blue', office_id: 3 },
{ office: 'red', office_id: 1 },
{ office: 'orange', office_id: 2 },
{ office: 'yellow', office_id: 4 },
]
},
methods: {
}
})在我上面的代码中,v-for给出了办公室,但是有些办公室列出了两次(例如“蓝色”office)。我如何过滤这个数组并且只显示每个办公室一次?我想尝试一下.reduce(),但是我的尝试没有成功。感谢任何能帮忙的人!
发布于 2019-08-04 05:20:31
你和reduce走在正确的轨道上。由于您使用的是Vue,所以最好也将其放入计算属性中:
computed: {
unresolvedIssuesGroupedByOffice() {
return this.unresolvedIssues.reduce((groups, issue) => {
let office = groups[issue.office] || []
office.push(issue)
groups[issue.office] = office
return groups
}, {})
}
}你更新的小提琴:https://jsfiddle.net/7g8zL2nw/
https://stackoverflow.com/questions/57343704
复制相似问题