javascript 算法题解

数组转换成树形结构 数据结构,上下级是有关联关系的 var data = [ {"node_id": "1", "parent_id": "0","name": "1"},{"node_id": "5","parent_id": "1",   "name": "2"},{"node_id": "6",...

数组转换成树形结构


数据结构,上下级是有关联关系的

var data = [ 
{
"node_id": "1",
"parent_id": "0",
"name": "1"
},
{
"node_id": "5",
"parent_id": "1",   
"name": "2"
},
{
"node_id": "6",
"parent_id": "5",   
"name": "3"
},
{
"node_id": "7",
"parent_id": "5",   
"name": "3333"
}
]


解法1:(多个循环)

data.forEach(ele => {
    let parentId = ele.parent_id;
    if (parentId === 0) {
   
    } else {
        data.forEach(d => {
            if (d.node_id === parentId) {
                let childArray = d.child;
                if (!childArray) {
                    childArray = []
                }
                childArray.push(ele);
                d.child = childArray;
        }
    })
    }
});
data.filter(item => item.parent_id == 0)


解法2:

function setTreeData(source){
    let cloneData = JSON.parse(JSON.stringify(source))    
    let tree = cloneData.filter(father=>{            
        let branchArr = cloneData.filter(child=>{
            return father.node_id == child.parent_id      
        });
        if(branchArr.length>0){
            father.children = branchArr;   
        }
        return father.parent_id==0;     
    });
    return tree     


在JavaScript的立即执行的具名函数A内修改A的值时到底发生了什么?

(function A() {
    console.log(A); // [Function A]
    A = 1;
    console.log(window.A); // undefined
    console.log(A); // [Function A]
}())


这是一个立即执行的函数表达式(Immediately-invoked function expression, IIFE),更特殊的,该函数表达式是一个具名函数表达式(Named function expression, NFE)。


NFE 有两个好玩的特性:


1、作为函数名的标识符(在这里是 A )只能从函数体内部访问,在函数外部访问不到 (IE9+)。(kangax

有一篇 博客 详细讨论了 NFE 以及 IE6~8 的 JScript bug,推荐阅读!) ES5 Section

13 特别提及了这一点:

The Identifier in a FunctionExpression can be referenced from inside the FunctionExpression’s FunctionBody to allow the function to call itself recursively. However, unlike in a FunctionDeclaration, the Identifier in a FunctionExpression cannot be referenced from and does not affect the scope enclosing the FunctionExpression.


2、绑定为函数名的标识符(在这里是A)不能再绑定为其它值,即该标识符绑定是不可更改的(immutable),所以在 NFE 函数体内对 A 重新赋值是无效的。ES5 Section 13 详细描述了创建 NFE 的机制:

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
王凯
王凯

92 篇文章

作家榜 »

  1. admin 651 文章
  2. 粪斗 185 文章
  3. 王凯 92 文章
  4. 廖雪 78 文章
  5. 牟雪峰 12 文章
  6. 李沁雪 9 文章
  7. 全易 2 文章
  8. Garmcrypto7undop 0 文章