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. 如何发布一个npm包?

    npm包在现在前端开发中经常使用且便利,而我也是经常使用,而没研究怎么去发布npm.那如何发布npm包呢? 一.在npm的官网上注册一个账号登录,https://www.npmjs.com/ 注意此步 ...

  2. P4074 [WC2013]糖果公园

    思路 带修莫队+树上莫队 注意代码细节即可,答案的维护非常简单 蒟蒻的大常数代码 #include <cstdio> #include <algorithm> #include ...

  3. poj1236 Network of Schools(SCC缩点+结论推导)

    第一问简单不讲. 第二问简化后问题是给一张DAG求最少添加几条边使得DAG变成一个SCC.首先所有中间点(有入度有出度)肯定直接顺着走到无出度点,所以肯定是无出度点连向无入度点. 把无入度点作为点集S ...

  4. C# 泛型(4) 持续更新

    泛型可以创建独立于被包含类型的类和方法. C++模板与泛型相似. 泛型优点性能 System.Collections 和 System.Collections.Generic 名称空间泛型和非泛型集合 ...

  5. Acwing-287-积蓄程度(树上DP, 换根)

    链接: https://www.acwing.com/problem/content/289/ 题意: 有一个树形的水系,由 N-1 条河道和 N 个交叉点组成. 我们可以把交叉点看作树中的节点,编号 ...

  6. HDU 6051 - If the starlight never fade | 2017 Multi-University Training Contest 2

    /* HDU 6051 - If the starlight never fade [ 原根,欧拉函数 ] | 2017 Multi-University Training Contest 2 题意: ...

  7. Java HashMap实现原理分析

    参考链接:https://www.cnblogs.com/xiarongjin/p/8310011.html 1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是 ...

  8. kubernetes Configmap secret的使用

    kubernetes configmap 核心作用是让配置信息和镜像解耦,pod可以使用configmap的数据生成配置文件.如果后端的pod配置文件要改变时,只需要更改下configmap里面的数据 ...

  9. 51 Nod 1475 建设国家 (优先队列+贪心)

    1475 建设国家  基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 小C现在想建设一个国家.这个国家中有一个首都,然后有若干个中间站,还有若干个城 ...

  10. 剧终—AFO.

    /* noip一等完跪. 高考你好. 一年后山大见. AFO. */