Vue
HTML
<div id="app">
<button @click="logSelected">log selected</button>
<div v-for="item in filters">
<p> {{item.title}} </p>
<ol>
<li v-for="filter in item.filterData.variants">
<label>
<input type="checkbox" v-model="filter.checked">
</label>
</li>
</ol>
</div>
</div>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
li {
margin: 8px 0;
}
h2 {
font-weight: bold;
margin-bottom: 15px;
}
del {
color: rgba(0, 0, 0, 0.3);
}
Vue
new Vue({
el: "#app",
data () {
return {
"filters": [
{
"type": "checkbox",
"title": "Пол",
"filterData": {
"variants": [
{
"key": 14,
"value": "Мужской"
},
{
"key": 15,
"value": "Женский"
}
]
},
"filterId": 1
},
{
"type": "checkbox",
"title": "num",
"filterData": {
"variants": [
{
"key": 2,
"value": "345"
},
{
"key": 1,
"value": "123"
}
]
},
"filterId": 2
}
]
}
},
methods: {
logSelected() {
const selected = this.filters.map(n => ({
filterId: n.filterId,
values: n.filterData.variants.filter(m => m.checked).map(m => m.key)
}));
console.log(selected);
}
}
})