js 递归查询所有的叶子结点_json树递归js查询json父子节点
var json = [{
"MenuCode": "S0-3100-00",
"MenuAction": "TelPay",
"MenuName": "通訊費(fèi)",
"subMenu": [{
"MenuCode": "S0-3100-01",
"MenuAction": "ChinaMobileTelBalQryInitAct",
"MenuName": "中國移動(dòng)"
}, {
"MenuCode": "S0-3100-02",
"MenuAction": "UnicomTelBalQryInitAct",
"MenuName": "中國聯(lián)通"
}, {
"MenuCode": "S0-3100-03",
"MenuAction": "TelecomTelBalQryInitAct",
"MenuName": "中國電信"
}]
}, {
"MenuCode": "S0-3200-00",
"MenuAction": "PowerPayInitAct",
"MenuName": "電費(fèi)",
"subMenu": [{
"MenuCode": "S0-3210-00",
"MenuAction": "SmartPowerCardInitAct",
"MenuName": "智能電能表充值",
"subMenu": [{
"MenuCode": "S0-3210-01",
"MenuAction": "SmartPowerCardPayInitAct",
"MenuName": "購電卡充值"
}, {
"MenuCode": "S0-3210-02",
"MenuAction": "SmartPowerCardQueryInitAct",
"MenuName": "購電卡查詢"
}, {
"MenuCode": "S0-3210-03",
"MenuAction": "SmartPowerCardRewriteInitAct",
"MenuName": "購電卡補(bǔ)寫"
}]
}, {
"MenuCode": "S0-3220-00",
"MenuAction": "ElectricChargeInitAct",
"MenuName": "電能表無卡充值",
"subMenu": [{
"MenuCode": "S0-3220-01",
"MenuAction": "ElectricChargeQryInitAct",
"MenuName": "購電充值"
}, {
"MenuCode": "S0-3220-02",
"MenuAction": "ElectricChargeMsgRegInitAct",
"MenuName": "短信訂閱"
}]
}]
}, {
"MenuCode": "S0-3300-00",
"MenuAction": "HeatingPayInitAct",
"MenuName": "取暖費(fèi)",
"subMenu": [{
"MenuCode": "S0-3300-04",
"MenuAction": "JinNengHeatingQryInitAct",
"MenuName": "天津能源繳費(fèi)"
}]
}, {
"MenuCode": "S0-3400-00",
"MenuAction": "CablePayInitAct",
"MenuName": "有線電視費(fèi)",
"subMenu": [{
"MenuCode": "S0-3400-01",
"MenuAction": "GuangDianCableQryInitAct",
"MenuName": "廣電有線繳費(fèi)"
}, {
"MenuCode": "S0-3400-02",
"MenuAction": "TedaCableQryInitAct",
"MenuName": "泰達(dá)有線繳費(fèi)"
}]
}, {
"MenuCode": "S0-3000-01",
"MenuAction": "ETCLoadInitAct",
"MenuName": "ETC卡充值"
}, {
"MenuCode": "S0-3500-00",
"MenuAction": "WaterPayInitAct",
"MenuName": "水費(fèi)",
"subMenu": [{
"MenuCode": "S0-3500-01",
"MenuAction": "JinNanWaterQryInitAct",
"MenuName": "津南水費(fèi)繳費(fèi)"
}]
}, {
"MenuCode": "S0-3000-03",
"MenuAction": "GasPayInitAct",
"MenuName": "燃?xì)赓M(fèi)"
}, {
"MenuCode": "S0-3000-04",
"MenuAction": "CommonPayInitAct",
"MenuName": "通用繳費(fèi)"
}, {
"MenuCode": "S0-3600-00",
"MenuAction": "CityCardInitAct",
"MenuName": "城市一卡通充值",
"subMenu": [{
"MenuCode": "S0-3600-01",
"MenuAction": "CityCardPayInitAct",
"MenuName": "城市卡充值"
}, {
"MenuCode": "S0-3600-02",
"MenuAction": "CityCardRewriteInitAct",
"MenuName": "城市卡補(bǔ)寫卡"
}]
}, {
"MenuCode": "S0-3000-05",
"MenuAction": "SocialSecurityQryInitAct",
"MenuName": "社保繳費(fèi)"
}];
/**
* Author : 落雨
* 遞歸查詢JSON樹 父子節(jié)點(diǎn)
*/
var parentNode = null;
var node = null;
/**
* 根據(jù)NodeID查找當(dāng)前節(jié)點(diǎn)以及父節(jié)點(diǎn)
*
* @param {[type]}
* @param {[type]}
* @return {[type]}
*/
function getNode(json, nodeId) {
//1.第一層 root 深度遍歷整個(gè)JSON
for (var i = 0; i < json.length; i++) {
if (node) {
break;
}
var obj = json[i];
//沒有就下一個(gè)
if (!obj || !obj.MenuCode) {
continue;
}
//2.有節(jié)點(diǎn)就開始找,一直遞歸下去
if (obj.MenuCode == nodeId) {
//找到了與nodeId匹配的節(jié)點(diǎn),結(jié)束遞歸
node = obj;
break;
} else {
//3.如果有子節(jié)點(diǎn)就開始找
if (obj.subMenu) {
//4.遞歸前,記錄當(dāng)前節(jié)點(diǎn),作為parent 父親
parentNode = obj;
//遞歸往下找
getNode(obj.subMenu, nodeId);
} else {
//跳出當(dāng)前遞歸,返回上層遞歸
continue;
}
}
}
//5.如果木有找到父節(jié)點(diǎn),置為null,因?yàn)闆]有父親
if (!node) {
parentNode = null;
}
//6.返回結(jié)果obj
return {
parentNode: parentNode,
node: node
};
}
//批量查詢
var query = [
'S0-3400-00', 'S0-3100-03', 'S0-3210-02', 'S0-3210-03', 'S0-3000-05', 'S0-3300-04'
];
//打印結(jié)果
for (var i = 0; i < query.length; i++) {
node = null;
parentNode = null;
var obj = getNode(json, query[i]);
console.log("查詢nodeId:" + query[i] + ", 結(jié)果:" + obj.node.MenuCode + ",name:" + obj.node.MenuName + " -> 父級(jí):" + (obj.parentNode ? obj.parentNode.MenuName : '木有父級(jí)!'));
}
總結(jié)
以上是生活随笔為你收集整理的js 递归查询所有的叶子结点_json树递归js查询json父子节点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis 什么是冷数据_阿里Java三
- 下一篇: jieba库词频统计_网购评论之词频分析