【发布时间】:2023-04-09 10:46:01
【问题描述】:
我有一个这样的对象数组(大陆):
data() {
return {
continents: [
{
name: "South America",
countries: [
{
name: "Paraguay"
},
{
name: "Chile"
}
]
},
{
name: "North America",
countries: [
{
name: "Costa Rica"
},
{
name: "Mexico"
}
]
}
]
}
}
// 6 continents and over 250 countries within.
我试图像这样用v-model 'filter' 过滤它
computed: {
filtered() {
return this.continents.filter(continent => {
continent.countries = continent.countries.filter(country => {
return country.name.match(new RegExp(this.filter, 'i'));
});
return continent.countries.length;
});
}
}
并使用v-for 指令渲染它,如下所示:
<input v-model="filter" type="text">
<div v-for="continent in filtered" v-if="filtered.length" class="countries-group">
<h4>{{ continent.name }}</h4>
<ul class="country-list">
<li v-for="country in continent.countries" class="country-item">{{ country.name }}</li>
</ul>
</div>
它几乎可以工作,但是我的计算属性过滤修改了原始国家数据,所以当我尝试退格过滤器v-model 时,它不会返回初始化数据,因为它已经被过滤对象覆盖。
【问题讨论】:
标签: javascript arrays vue.js