Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为v-treeview搜索JS对象的嵌套数组_Javascript_Arrays_Vue.js_Search_Vuetify.js - Fatal编程技术网

Javascript 为v-treeview搜索JS对象的嵌套数组

Javascript 为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

我正在尝试为我的Vuetify
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.