一級(jí)對(duì)象遍歷方法
for ... in????遍歷對(duì)象自身的和繼承的可枚舉屬性(不含Symbol屬性)
Object.keys(obj)????返回一個(gè)數(shù)組,包括對(duì)象自身的(不含繼承的)所有可枚舉屬性(不含Symbol屬性)
Object.getOwnPropertyNames(obj)????返回一個(gè)數(shù)組,包括對(duì)象自身的所有可枚舉屬性(不含Symbol屬性)
Object.getOwnPropertySymbols(obj)????返回一個(gè)數(shù)組,包含對(duì)象自身的所有Symbol屬性
Reflect.ownKeys(obj)????返回一個(gè)數(shù)組,包含對(duì)象自身的所有(不枚舉、可枚舉和Symbol)屬性
Reflect.enumerate(obj)????返回一個(gè)Iterator對(duì)象,遍歷對(duì)象自身的和繼承的所有可枚舉屬性(不含Symbol屬性)
總結(jié):
????1.只有Object.getOwnPropertySymbols(obj)和Reflect.ownKeys(obj)可以拿到Symbol屬性
????2.只有Reflect.ownKeys(obj)可以拿到不可枚舉屬性
多級(jí)對(duì)象遍歷
var parseTreeJson = function(treeNodes){
? ? ? if (!treeNodes || !treeNodes.length) return;
? ? ? for (var i = 0, len = treeNodes.length; i < len; i++) {
? ? ? ? ? ? var childs = treeNodes[i].children;
? ? ? ? ? ? console.log(treeNodes[i].id);
? ? ? ? ? ? if(childs && childs.length > 0){
? ? ? ? ? ? ? ? parseTreeJson(childs);
? ? ? ? ? ? }
? ? ? }
? ? };
? ? console.log('------------- 遞歸實(shí)現(xiàn) ------------------');
? ? parseTreeJson(treeNodes);