上效果图
上代码
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <!-- 引入款式 --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <style type="text/css"> .flex { display: flex; } .flex .item{ width: 300px; } </style></head><body> <div id="app"> <el-form :inline="true"> <el-form-item> <el-input v-model="input" placeholder="请输出内容"></el-input> </el-form-item> <el-form-item> <el-button @click="search">搜寻</el-button> </el-form-item> </el-form> <div class="flex"> <div class="item"> <h2>源数组对象</h2> <pre v-html="arr"></pre> </div> <div class="item"> <h2>搜寻后果:</h2> <pre v-html="result"></pre> </div> </div> </div></body><!-- 先引入 Vue --><script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js"></script><!-- 引入组件库 --><script src="https://unpkg.com/element-ui/lib/index.js"></script><script> new Vue({ el: '#app', data() { return { input: '', result: '', arr: [ { title: 'JavaScript', children: [ { title: '来开黑啦', children: [] }, { title: '那个区', children: [ { title: '无畏先锋', children: [] } ] } ] }, { title: '费雷尔卓德怎么样', children: [ { title: '能够的', children: [] } ] }, { title: '好点卡', children: [ { title: '卡啦', children: [] } ] }, { title: '电脑配置不行', children: [] }, { title: '换一个', children: [ { title: '已上线', children: [] } ] } ] } }, mounted() { }, methods: { handleData(arr, val){ let newArr =[] arr.forEach(item => { if (item.children && item.children.length) { let children = this.handleData(item.children, val) let obj = { ...item, children } if (children && children.length) { newArr.push(obj) } else if (item.title.includes(val)) { newArr.push({ ...item }) } } else { if (item.title.includes(val)) { newArr.push(item) } } }) return newArr }, search() { this.result = this.handleData(this.arr, this.input) }, } })</script></html>