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 生成树以及关键字搜索生成树的更多相关文章

  1. js 模拟百度关键字搜索与跳转

    测试效果: css样式: ul{ display:none; } html代码: <input type="text" id="text" /> & ...

  2. vue.js(11)--案例--关键字搜索列表

    关键字搜索品牌案例 (1)页面布局 <div class="app"> <div class="panel panel-primary"> ...

  3. js中this关键字测试集锦

    参考:阮一峰<javascript的this用法>及<JS中this关键字详解> this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在 ...

  4. XE3随笔18:实例 - 解析 Google 关键字搜索排名

    同上例类似, 通过 'http://clients1.google.cn/complete/search?&q=' + "关键字" 可以获取 Google 的关键字搜索排名 ...

  5. JS中this关键字详解

    本文主要解释在JS里面this关键字的指向问题(在浏览器环境下). 阅读此文章,还需要心平气和的阅读完,相信一定会有所收获,我也会不定期的发布,分享一些文章,共同学习 首先,必须搞清楚在JS里面,函数 ...

  6. JS 中 this 关键字详解

    本文主要解释在JS里面this关键字的指向问题(在浏览器环境下). 首先,必须搞清楚在JS里面,函数的几种调用方式: 普通函数调用 作为方法来调用 作为构造函数来调用 使用apply/call方法来调 ...

  7. swift - 3D 视图,截图,关键字搜索

    1.xib 上的 3D效果 按钮 2. import UIKit //1.导入框架 import MapKit class ViewController: UIViewController { @IB ...

  8. JS中的关键字和保留字

    JavaScript中不能作为变量名的关键字和保留字总结: 1.js中的关键字: break case catch continue default delete do else finally fo ...

  9. js获取页面所有搜索条件

    <div class="search">        产品简码:@Html.TextBox("ProCode", "")    ...

随机推荐

  1. tigervnc-server安装

    #vncserver安装方法 #su - root rpm -ivh tigervnc-server-1.8.0-13.el7.x86_64.rpm cp /lib/systemd/system/vn ...

  2. yum安装mysql-server

    yum install mysql-server mysql vi /etc/my.cnf [client] default-character-set=utf8 service mysqld sta ...

  3. [Abp vNext微服务实践] - 服务通讯

    简介 服务通讯是微服务架构中必不可少的功能,服务通讯的效率决定了微服务架构的优略.常用的微服务通讯策略有两种,分别是rpc.http,其中rpc以gRpc框架为代表使用者最多.abp vNext微服务 ...

  4. [shell] shell echo打印换行的方法

    echo要支持同C语言一样的\转义功能,只需要加上参数-e,如下所示: echo -e hello \n echo \n

  5. IPV4和IPV6的划分

    IP(Internet Protocol,网络互联协议)地址就是连接互联网的主机被分配或指派的一段数字标识,是传输报文组装时最重要的组成部分,用来在互联网中数据传输时标识源和目标主机. IPv4 IP ...

  6. P1361 小M的作物 最小割理解

    如果没有组合效益的存在 我们直接每个点两部分的最大值即可 换成网络流模型来看 即把S点看作是A田 把T点看作是B田 每种作物看作一个点 分别连边(S,i,A[i]) (i,T,B[i]) 最后图中所有 ...

  7. CF487E Tourists[圆方树+树剖(线段树套set)]

    做这题的时候有点怂..基本已经想到正解了..结果感觉做法有点假,还是看了正解题解.. 首先提到简单路径上经过的点,就想到了一个关于点双的结论:两点间简单路径上所有可能经过的点的并等于路径上所有点所在点 ...

  8. sentinel.conf 配置

    daemonize yes logfile "/home/data/redis/redis_sentinel.log" sentinel monitor mymaster 192. ...

  9. springboot 详解RestControllerAdvice(ControllerAdvice)(转)

    springboot 详解RestControllerAdvice(ControllerAdvice)拦截异常并统一处理简介 @Target({ElementType.TYPE}) @Retentio ...

  10. linux系统相关文件和操作

    查看内核: uname -r [root@server0 ~]# uname -r -.el7.x86_64 [root@server0 ~]# 查看版本: cat  /etc/redhat-rele ...