Javascript 为v-treeview搜索JS对象的嵌套数组
我正在尝试为我的VuetifyJavascript 为v-treeview搜索JS对象的嵌套数组,javascript,arrays,vue.js,search,vuetify.js,Javascript,Arrays,Vue.js,Search,Vuetify.js,我正在尝试为我的Vuetifyv-treeview组件实现一个搜索功能,它使用一个过滤器函数来过滤一组嵌套的JS对象,这些对象看起来像 [ { Name: 'Name Level 1', Title: 'Title Level 1', children: [ { Name: 'Name Level 2', Title: 'Title Level 2', childr
v-treeview
组件实现一个搜索功能,它使用一个过滤器函数来过滤一组嵌套的JS对象,这些对象看起来像
[
{
Name: 'Name Level 1',
Title: 'Title Level 1',
children: [
{
Name: 'Name Level 2',
Title: 'Title Level 2',
children: [ ... ]
}
]
},
...
]
现在,我有一个文本字段,v-models用于搜索,还有一个过滤器函数,看起来像Bara Koc评论中的那个
filter () {
return (item, search, textKey) => {
let result = []
const _filter = (item, search, textKey) => {
for (const leaf of item) {
if (leaf[textKey].indexOf(search) !== -1) {
result = [...result, { Name: leaf.Name, Title: leaf.Title }]
}
if (leaf.children) {
return _filter(leaf.children, search, textKey)
} else {
return null
}
}
}
_filter(item, search, textKey)
return result
}
}
而v-treeview
看起来像
<v-treeview
:items="treeItems"
:search="search"
:filter="filter"
:open.sync="open"
item-key="Name"
dense
style="max-height: 700px;"
class="overflow-y-auto overflow-x-auto"\>
可以通过递归函数遍历树。您可以将数据结构看作一棵M树。我还使用闭包进行数据封装
const数据=[
{
名称:“名称级别1”,
标题:"苹果",,
儿童:[
{
名称:“名称级别2”,
标题:“标题级别2”,
儿童:[{
名称:“名称级别3”,
标题:"申请",,
子项:空
}]
}
]
},
{
名称:“名称级别1”,
标题:"苹果",,
子项:空
}
]
常量过滤器=(项目、搜索、文本键)=>{
让结果=[]
常量过滤器=(项目、搜索、文本键)=>{
用于(项目的常量页){
if(叶[textKey].indexOf(搜索)!=-1){
结果=[…结果,{Name:leaf.Name,Title:leaf.Title}]
}
leaf.children?\u过滤器(leaf.children,搜索,文本键):null
}
}
_过滤器(项目、搜索、文本键)
返回结果
}
console.log(filter(data,'App,'Title'))
Thank you@Bera Koc,只是一个简单的问题,我得到了预期的赋值或函数调用,而在'leaf.children'上看到了一个表达式_过滤器(leaf.children,search,'Title'):空'line。知道为什么吗?我猜这是因为我尝试将你的filter const作为Vue.js方法,并将其传递给v-treeview
。我对Vue不太感兴趣。Vue中必须存在一些数据差异。由于函数是纯函数,我认为发送它不会导致任何错误。从错误信息来看,我认为您发送的方式是错误的。我希望我能帮助你更多。
vue.runtime.esm.js?5eb8:1888 TypeError: Invalid attempt to iterate non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.