如何用 js 递归输出树型

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>

    <script>

        var data = [
            { id: 1, title: ‘a‘, pid: 0 },
            { id: 2, title: ‘a1‘, pid: 1 },
            { id: 3, title: ‘a11‘, pid: 2 },
            { id: 4, title: ‘a12‘, pid: 2 },
            { id: 5, title: ‘a2‘, pid: 1 },
            { id: 6, title: ‘a21‘, pid: 5 }
        ];
        function fn(data, pid) {
            var result = [], temp;
            for (var i in data) {
                if (data[i].pid == pid) {
                    result.push(data[i]);
                    temp = fn(data, data[i].id);
                    if (temp.length > 0) {
                        data[i].children = temp;
                    }
                }
            }
            return result;
        }
        //console.log(fn(data, 0));

        Array.prototype.ToTreeJson = function (pid) {
            var result = [], temp;
            for (var i in this) {
                if (this[i].pid == pid) {
                    result.push(this[i]);
                    temp = fn(this, this[i].id);
                    if (temp.length > 0) {
                        this[i].children = temp;
                    }
                }
            }
            return result;
        }

        var p = data.ToTreeJson(0);
    </script>
</body>
</html>
时间: 2024-11-14 17:13:17

如何用 js 递归输出树型的相关文章

如何用js检测判断时间日期的间距

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>如何用js检测判断日期大于多少天</title> <script> window.onload=function(){ var ul1=document.getElementById("time"); var span1=ul1.getElementsByTag

JS DOM(文档对象模型)与BOM(浏览器对象模型)

在JS中,对DOM(Document Object Model)对象和BOM(Browser Object Model )对象的操作是非常重要的内容.DOM主要包括HTML文档的属性和方法,像对HTML节点的操作,CSS的操作和HTML事件的监听和处理.BOM不要包括浏览器相关的一些属性和方法. DOM知识点1.改变页面的元素和属性a.获取元素的方法:document.getElementById()document.getElementsByTagName()document.getEleme

WebDatagrid-checkbox行如何用js控制其是否可用

由于js不能控制WebDatagrid的可编辑不可编辑,只能用前台控制.当checkbox行需要设置有时可选有时不可选,如何用js解决. 需要先后台设置可编辑.Behaviors.EditingCore.enabled=true; 然后前台设置: WebDatagrid.get_columns().get_columnFromKey("行key值")._editableCheckbox = false; 进行前台设置. <Columns> <ig:UnboundChe

360极速浏览器UA怪异以及如何用js判断360浏览器

本文最后一次更新于7个月前,文章内容可能略有出入.若发现文章中有错误之处,可以留言评论告诉作者. 1.360极速浏览器UA因域名不同而异 今天在写一个判断浏览器.浏览器版本.操作系统.操作系统版本.浏览器外壳的js,去http://hao.360.cn/sethomepage.html网站看看他们的js是如何写的,始终不知道他们是如何通过js来判断浏览器是360极速的,这不看不知道,一看吓一跳. 在http://hao.360.cn/sethomepage.html这个网址访问的时候,获得浏览器

如何用js判断一个对象是不是Array

.如何用js判断一个对象是不是Array 1.Array.isArray(obj) 调用数组的isArray方法 2.obj instanceof Array 判断对象是否是Array的实例 3.Object.prototype.toString.call(obj) ==='[object Array]' Object.prototype.toString方法会取得对象的一个内部属性[[Class]],然后依据这个属性,返回一个类似于[object Array]的字符串作为结果,call用来改变

js 递归学习

作用:将一些复制的算法变为简单,比如:(举例子)计算数组 var  a =[1,3,4,6,7,8]的长度:求 5!的值,也可以做搜索用等. //求数组的长度function len(arry){ if(arry[0] == null && arry[0]==undefined) return 0; else{ arry.shift(); return 1+ len(arry) } } //求5! function factorial(n){ if(n == 0 ){ return 1;

js 鸭式辨型法

无意中看到arr.length === +arr.length;这句代码,然后就去了解了下 这是一种鸭式辨型的判断方法. 鸭式辨型:像鸭子一样走路.游泳和嘎嘎叫的鸟就是鸭子 这句话表示: a.arr有length这个属性 b.arr.length是一个Number 那么arr可以是array,也可以是string Jquery中要判断一个变量是否是一个数组的确切方法:Object.prototype.toString.call(arr) === '[object Array]'; ES6可以通过

js,jquery的数字型字符串变量比较大小

转:http://blog.csdn.net/dxnn520/article/details/8267173 var定义的变量应该是字符串,有时没有经过类型转换而进行比较的话,小于十的话还可以,如果大于十就会出错 例: 1 var hour_select_begin=$('#hour_select_begin option:selected').text(); 2 3 var hour_select_end=$('#hour_select_end option:selected').text()

java递归、js递归,无限极分类菜单表

java-json import com.alibaba.fastjson.JSONObject; import java.util.ArrayList; import java.util.List; /** * @Description: 菜单工具类 * @version: V1.0 */ public class MenuTreeUtil { /** * @return * @Author * @Param nodes :所有的节点列表 */ public List data(List<JS