数组转换成树形结构
数据结构,上下级是有关联关系的
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 的机制:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!