gpt4 book ai didi

javascript - v-显示嵌套数组项是否与过滤数组匹配

转载 作者:行者123 更新时间:2023-12-01 00:22:27 25 4
gpt4 key购买 nike

我必须编写一个 Vue Web 应用程序,它将采用多个过滤器,将它们推送到一个数组,然后在单击方法上检查过滤器数组值,以及是否有任何值与图 block 嵌套数组内的任何嵌套值相匹配,显示匹配的图 block 。所以,我的过滤器数组可能有:

filters: ['cookies', 'jogging']

我的嵌套图 block 数组将具有:

tiles: [
{
"name": "Greg",
"food": ["cookies", "chips", "burgers"],
"activities": ["drawing", "watching movies"]
"favourite places": ["the parks", "movie theatre"]
},{
"name": "Robyn",
"food": ["cookies", "hotdogs", "fish"],
"activities": ["reading", "jogging"]
"favourite places": ["beach", "theme parks"]
},{
"name": "John",
"food": ["sushi", "candy", "fruit"],
"activities": ["writing", "planning"]
"favourite places": ["the moon", "venus"]
}
]

在上面的示例中,显示的图 block 将是 Robyn,因为她喜欢 cookies 和慢跑。

到目前为止,我的想法是编写一个 for 循环来检查嵌套数组内的值,这是我从这个解决方案中得到的:

https://stackoverflow.com/a/25926600/1159683

但是,我无法建立仅在 v-for/v-show 中显示项目的连接。我已经找到了将所有过滤器推送到过滤器数组的方法,但是当涉及到将其与嵌套数组匹配并根据匹配显示它们时,我不知所措。最好我想用 vanilla js (es5) 写出来。

感谢任何帮助。

谢谢!

最佳答案

computed: {
fullyMatchedTiles () {
// Matches must contain all terms from filter array

return this.tiles.filter(obj=> {

// Filter the filters to get matched count
let matchedFilters = this.filters.filter(filterItem=> {

// Check each property by looping keys
for (key in obj) {

// Only evaluate if property is an array
if (Array.isArray(obj[key])) {

// Return true if filterItem found in obj
if (obj[key].some(r=> filterItem.indexOf(r) >= 0)) {
return true
}
}
}
})
return this.filters.length === matchedFilters.length
})
},

partiallyMatchedTiles () {
// Matches must contain at least one term from filter array
// Check each object in the array
return this.tiles.filter(obj=> {

// Check each property by looping keys
for (key in obj) {

// Only evaluate if property is an array
if (Array.isArray(obj[key])) {

// Return true to the filter function if matched, otherwise keep looping
if (obj[key].some(r=> this.filters.indexOf(r) >= 0)) {
return true
}
}
}
})
},
},

抱歉,这不是 es5。我非常喜欢这些新功能,不想花时间回到 5 年前。

有关显示 vue 中返回的过滤对象的完整示例,请检查此 codepen https://codepen.io/shanemgrey/pen/jOErWbe

我认为您正在描述在 v-for 中进行过滤。尝试使用 v-for 中可用的过滤来完成它似乎逻辑太复杂。

我会按照所示方法在新的计算属性中分解数组,然后在模板中使用生成的过滤数组。

关于javascript - v-显示嵌套数组项是否与过滤数组匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59296156/

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