js 生成树以及关键字搜索生成树
function main(keywords,data){
function fn(arr){
var flag = false;
for(var i = 0;i <arr.length;i++){
var item = arr[i];
if(item.children.length > 0){
var res = fn(item.children);
if(res){
item.isHidden = false;
if(!item.open){
item.open = true;
}
}
}
if(item.isHidden === false){
flag = true;
}
}
return flag;
} function deal(arr,arr1){
arr.map(function(item){
if(item.children.length > 0){
deal(item.children,arr1);
}
delete item.children;
arr1.push(item);
})
} function createTree (originArr, pid, indexId, parentId) {
var tree = [];
for (var i = 0; i < originArr.length; i++) {
var item = originArr[i];
if (item[parentId] == pid) {
item.children = createTree(originArr, item[indexId], indexId, parentId);
tree.push(item);
}
}
return tree;
}
//var keywords = '成都镇';
data.map(function(item,index){
keywords = keywords.trim();
if(keywords != ''){
if(item.name.indexOf(keywords) > -1){
item.isHidden = false;
} else {
item.isHidden = true;
}
}else{
item.isHidden = false;
}
});
var result = createTree(data,0,'id','parentId');
fn(result); var arr1 = [];
deal(result,arr1);
var arr2 = arr1.filter(function(item){
return item.isHidden == false
});
// console.log(arr2);
var idArrs = [];
var pidArrs = [];
var arr4 = [];
arr2.map(function(item){
if(idArrs.indexOf(item.id) < 0 ){
idArrs.push(item.id);
}
if(pidArrs.indexOf(item.parentId) < 0 ){
pidArrs.push(item.parentId);
}
});
// idArrs idArrs.map(function(item1){
if(pidArrs.indexOf(item1)<0 && arr4.indexOf(item1) < 0){
arr4.push(item1)
}
});
for (var i = 0; i < arr4.length; i++) {
var item = arr4[i];
var result1 = createTree(data,item,'id','parentId');
deal(result1,arr2)
}
var finalRes = createTree(arr2,0,'id','parentId');
return finalRes;
}
var data = [
{ id: 1, parentId: 0, name: '四川' },
{ id: 2, parentId: 0, name: '贵州' },
{ id: 3, parentId: 0, name: '云南' },
{ id: 4, parentId: 0, name: '江苏' }, { id: 5, parentId: 1, name: '成都' },
{ id: 6, parentId: 2, name: '贵州' },
{ id: 7, parentId: 3, name: '昆明' },
{ id: 8, parentId: 4, name: '苏州' }, { id: 9, parentId: 5, name: '成都县1' },
{ id: 10, parentId: 5, name: '成都县2' },
{ id: 11, parentId: 5, name: '成都县3' },
{ id: 12, parentId: 5, name: '成都县4' },
{ id: 13, parentId: 5, name: '成都县5' }, { id: 14, parentId: 6, name: '贵州县1' },
{ id: 15, parentId: 6, name: '贵州县2' },
{ id: 16, parentId: 6, name: '贵州县3' }, { id: 17, parentId: 7, name: '昆明县1' },
{ id: 18, parentId: 7, name: '昆明县2' },
{ id: 19, parentId: 7, name: '昆明县3' }, { id: 20, parentId: 8, name: '苏州县1' },
{ id: 21, parentId: 8, name: '苏州县2' },
{ id: 22, parentId: 8, name: '苏州县3' },
{ id: 23, parentId: 8, name: '苏州县4' }, { id: 24, parentId: 9, name: '成都镇1' },
{ id: 25, parentId: 10, name: '成都镇2' }, { id: 26, parentId: 24, name: '成都村11' },
{ id: 27, parentId: 24, name: '成都村12' },
{ id: 28, parentId: 24, name: '成都村13' }
];
var re = main("成都镇",data);
console.log(JSON.stringify(re,null,2));
[
{
"id": 1,
"parentId": 0,
"name": "四川",
"isHidden": false,
"open": true,
"children": [
{
"id": 5,
"parentId": 1,
"name": "成都",
"isHidden": false,
"open": true,
"children": [
{
"id": 9,
"parentId": 5,
"name": "成都县1",
"isHidden": false,
"open": true,
"children": [
{
"id": 24,
"parentId": 9,
"name": "成都镇1",
"isHidden": false,
"children": [
{
"id": 26,
"parentId": 24,
"name": "成都村11",
"isHidden": true,
"children": []
},
{
"id": 27,
"parentId": 24,
"name": "成都村12",
"isHidden": true,
"children": []
},
{
"id": 28,
"parentId": 24,
"name": "成都村13",
"isHidden": true,
"children": []
}
]
}
]
},
{
"id": 10,
"parentId": 5,
"name": "成都县2",
"isHidden": false,
"open": true,
"children": [
{
"id": 25,
"parentId": 10,
"name": "成都镇2",
"isHidden": false,
"children": []
}
]
}
]
}
]
}
]
js 生成树以及关键字搜索生成树的更多相关文章
- js 模拟百度关键字搜索与跳转
测试效果: css样式: ul{ display:none; } html代码: <input type="text" id="text" /> & ...
- vue.js(11)--案例--关键字搜索列表
关键字搜索品牌案例 (1)页面布局 <div class="app"> <div class="panel panel-primary"> ...
- js中this关键字测试集锦
参考:阮一峰<javascript的this用法>及<JS中this关键字详解> this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在 ...
- XE3随笔18:实例 - 解析 Google 关键字搜索排名
同上例类似, 通过 'http://clients1.google.cn/complete/search?&q=' + "关键字" 可以获取 Google 的关键字搜索排名 ...
- JS中this关键字详解
本文主要解释在JS里面this关键字的指向问题(在浏览器环境下). 阅读此文章,还需要心平气和的阅读完,相信一定会有所收获,我也会不定期的发布,分享一些文章,共同学习 首先,必须搞清楚在JS里面,函数 ...
- JS 中 this 关键字详解
本文主要解释在JS里面this关键字的指向问题(在浏览器环境下). 首先,必须搞清楚在JS里面,函数的几种调用方式: 普通函数调用 作为方法来调用 作为构造函数来调用 使用apply/call方法来调 ...
- swift - 3D 视图,截图,关键字搜索
1.xib 上的 3D效果 按钮 2. import UIKit //1.导入框架 import MapKit class ViewController: UIViewController { @IB ...
- JS中的关键字和保留字
JavaScript中不能作为变量名的关键字和保留字总结: 1.js中的关键字: break case catch continue default delete do else finally fo ...
- js获取页面所有搜索条件
<div class="search"> 产品简码:@Html.TextBox("ProCode", "") ...
随机推荐
- 5. First-Class Functions
Function in python are first-class objects (runtime / element / argument / return) 1. Treating a Fun ...
- JSON添加注释的问题
JSON有两种数据结构: 名称/值对的集合:key : value样式: 值的有序列表:就是Array: 而在JSON的文档中说明只要是不符合上面两种结构的都不被支持,并提示错误 添加注释//或者/* ...
- 构建之法个人作业5——alpha2项目测试
[相关信息] Q A 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesign/ 这个作业要求在 ...
- Python MySQL 数据库连接不同方式
PyMySQL 驱动连接 什么是 PyMySQL?PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. PyMySQL 遵循 P ...
- mysql大数据解决方案--分表分库(0)
引言 对于一个大型的互联网应用,海量数据的存储和访问成为了系统设计的瓶颈问题,对于系统的稳定性和扩展性造成了极大的问题.通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式. •水 ...
- 数据结构系列文章之队列 FIFO
转载自https://mp.weixin.qq.com/s/ILgdI7JUBsiATFICyyDQ9w Osprey 鱼鹰谈单片机 3月2日 预计阅读时间: 6 分钟 这里的 FIFO 是先入先出 ...
- Vue event.stopPropagation()和event.preventDefault()的使用
定义和用法 1. event.stopPropagation()方法 阻止事件冒泡到父元素,阻止任何父事件处理程序被执行,但是它的默认事件仍然会执行.当调用这个方法的时候,如果点击了一个链接(a标签) ...
- nginx 端口转发 (proxy_pass反向代理)
第一种(访问IP转发到IP+端口) server{ listen ; server_name 192.168.1.114; index index.php index.html index.htm; ...
- C++全局变量的定义和声明
编译单元 编译分为两个步骤: 第一步:将每个.cpp或.c和相应的.h文件编译乘obj文件(包含预编译,汇编.编译) 第二部:将obj文件进行Link,生成最终的可执行文件 根据该阶段错误大致可分为两 ...
- 【线性代数】2-2:消元(Eliminate)
title: [线性代数]2-2:消元(Eliminate) toc: true categories: Mathematic Linear Algebra date: 2017-08-31 16:1 ...