-
数组转换成树形结构
数据结构,上下级是有关联关系的
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 的机制:
javascript 算法题解
最新推荐文章于 2024-06-18 11:22:27 发布