用 for(key in data) 循环遍历对象(data)时,key会返回对象属性名,到达对象属性的最底层 key 会返回一个view,然后返回上一层,
而data.view则是key: data[key],当key到达最底层或重复时返回view时,,data.view也会返回完整的对象
function preorderTraversal(root){ //第一个root为data var traverseQueue = []; function genTraverseQueue(root) { var key; traverseQueue.push(root.view); for(key in root){ console.log(root.view); console.log(key); if(key != 'view'){ if(root.hasOwnProperty(key)){ //JavaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性 genTraverseQueue(root[key]); } } } } genTraverseQueue(root); //data第一次访问view的时候为undefined。删除第一个元素 traverseQueue.shift(); return traverseQueue; traverseQueue = null; }
function renderTree(data, parentElement){
/* var data = {
'root': {
'a': {
'a1': {},
'a2': {}
},
'b': {
'b1': {
'b1.1': {},
'b1.2': {},
'b1.3': {
'b1.3.1': {}
}
},
'b2': {
'b2.1': {}
}
}
}
};
*/
// };
var key;
var treeView;
for(key in data){
if(data.hasOwnProperty(key)){
if(key != 'view'){
treeView = document.createElement('div');
treeView.className='child';
treeView.innerHTML = key;
parentElement.appendChild(treeView);
data[key].view = treeView;
data[key].view.setAttribute('data', key.toString());
renderTree(data[key], treeView);
}
}
}
}