javascript算法小结

1.扁平结构压成树形结构

http://stackoverflow.com/questions/12831746/javascript-building-a-hierarchical-tree

 1 var items = [
 2     {"Id": "1", "Name": "abc", "Parent": "2"},
 3     {"Id": "2", "Name": "abc", "Parent": ""},
 4     {"Id": "3", "Name": "abc", "Parent": "5"},
 5     {"Id": "4", "Name": "abc", "Parent": "2"},
 6     {"Id": "5", "Name": "abc", "Parent": ""},
 7     {"Id": "6", "Name": "abc", "Parent": "2"},
 8     {"Id": "7", "Name": "abc", "Parent": "6"},
 9     {"Id": "8", "Name": "abc", "Parent": "6"}
10 ];
11
12 function buildHierarchy(arry) {
13
14     var roots = [], children = {};
15
16     // find the top level nodes and hash the children based on parent
17     for (var i = 0, len = arry.length; i < len; ++i) {
18         var item = arry[i],
19             p = item.Parent,
20             target = !p ? roots : (children[p] || (children[p] = []));
21
22         target.push({ value: item });
23     }
24
25     // function to recursively build the tree
26     var findChildren = function(parent) {
27         if (children[parent.value.Id]) {
28             parent.children = children[parent.value.Id];
29             for (var i = 0, len = parent.children.length; i < len; ++i) {
30                 findChildren(parent.children[i]);
31             }
32         }
33     };
34
35     // enumerate through to handle the case where there are multiple roots
36     for (var i = 0, len = roots.length; i < len; ++i) {
37         findChildren(roots[i]);
38     }
39
40     return roots;
41 }
42
43 console.log(buildHierarchy(items));?

时间: 2024-11-05 18:28:34

javascript算法小结的相关文章

数据挖掘中分类算法小结

数据挖掘中分类算法小结 数据仓库,数据库或者其它信息库中隐藏着许多可以为商业.科研等活动的决策提供所需要的知识.分类与预测是两种数据分析形式,它们可以用来抽取能够描述重要数据集合或预测未来数据趋势的模型.分类方法(Classification)用于预测数据对象的离散类别(Categorical Label);预测方法(Prediction )用于预测数据对象的连续取值. 分类技术在很多领域都有应用,例如可以通过客户分类构造一个分类模型来对银行贷款进行风险评估;当前的市场营销中很重要的一个特点是强

稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结

稀疏矩阵的三元组顺序表存储及矩阵相乘算法小结 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 一:稀疏矩阵的三元组顺序表数据结构 typedef int ElemType; typedef struct { intx, y;  //该非零元素的行下标和列下标 ElemTypee; //该非零元素的值 } Triple; typedef struct { Tripledata[MAXSIZE]; //非零元素三元组顺序表 intmu, nu, t

关于JavaScript算法的几个小练习--DonyZ

各位小伙伴们,以下的内容来自于我在freecodecamp上做的练习,这是一个很好的学习平台,在此分享给大家,下面的题目答案在文章的最后(答案都是我自己写的,虽然都写出来了,可并不一定是最好的写法,所以希望能和大家一起交流,嘿嘿),并且会持续更新关于JavaScript算法的文章,希望小伙伴们能多多交流,互相学习 1.翻转字符串 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串. 你的结果必须得是一个字符串. 例如:reverseString("hello

javascript 学习小结 (二) by FungLeo

javascript 学习小结 (二) by FungLeo 前言 前面写过一个学习小结javascript 学习小结 JS装逼技巧(一) by FungLeo 那篇博文总结的东西还是比较多的. 但是JS有很多的内容,都是很有用的知识点,不可能一下子记住.因此,我的学习小结的会一直更新. 因为学习进度的不同,可能每篇博文的长短也不一样,有的学的东西多,就长点. 查询某个字符串在某个数组中的索引值 笨方法 我的基础比较差,所以很多东西是记不住的.因此,我在需要这样做的时候,我写了如下代码 var

Javascript算法系列之快速排序(Quicksort)

Javascript算法系列之快速排序(Quicksort) 原文出自: http://www.nczonline.net/blog/2012/11/27/computer-science-in-javascript-quicksort/ https://gist.github.com/paullewis/1981455#file-gistfile1-js 快速排序(Quicksort)是对冒泡排序的一种改进,是一种分而治之算法归并排序的风格 核心的思想就是通过一趟排序将要排序的数据分割成独立的

18大经典数据挖掘算法小结

18大经典数据挖掘算法小结 本文所有涉及到的数据挖掘代码的都放在了我的github上了. 地址链接: https://github.com/linyiqun/DataMiningAlgorithm 大概花了将近2个月的时间,自己把18大数据挖掘的经典算法进行了学习并且进行了代码实现,涉及到了决策分类,聚类,链接挖掘,关联挖掘,模式挖掘等等方面.也算是对数据挖掘领域的小小入门了吧.下面就做个小小的总结,后面都是我自己相应算法的博文链接,希望能够帮助大家学习. 1.C4.5算法.C4.5算法与ID3

Javascript数组小结

Javascript数组小结 Javascript将指定的数字索引值转换成字符串--索引值1变成"1"--然后将其作为属性名来使用. 数组的length修改后,数组中大于设定值的元素将被删除 数组的添加删除: 1)  修改length属性值(删除) 2)  push.pop在数组的尾部进行插入.删除操作并返回操作元素:unshift和shift()在数组的首部进行插入.删除操作 3)  delete可以删除数组元素,但它不会改变数组的length属性,只是将该值置空. 4)  spli

最短路径算法小结

不同性质的图中,所采取的策略有所不同,自然存在各样的求最短路径的算法. 无向无权图:BFS 有向正权图:Dijkstra 有向无负环图:Bellman-Ford(单点),Floyd-Warshall(任意两点) 有向无环图(dags): 基于动态规划的算法. 广度优先搜索(BFS) 对于无向无权图(也可以假设权值为1),就可以使用最基本的广度优先搜索算法,从源点开始对整个图进行搜索,访问到所有的点.因为广度优先搜索最先访问到的是相邻的点,所以距离最近的点最先访问到,记录的距离也就最小. 算法伪代

JavaScript算法题之–随机数的生成

JavaScript算法题之–随机数的生成 需求描述:从一组有序的数据中生成一组随机并且不重复的数,类似于简单的抽奖程序的实现. 先来生成一个有序的数组: 1 var arr = [], 2     length = 100, 3     i = 0; 4   5 for( ; i < length; i++ ){ 6     arr.push( i ); 7 } 从一个长度为 100 的有序数组中随机拿出 10 个随机的数,并且不能有重复. 方法1:随机抽取法 01 var gRandomAr