Json树递归Js查询Json父子节点

 

 

<!DOCTYPE html>
<html lang="en"> <head> <meta charset="UTF-8"> <title>json-query</title> <script type="text/javascript"> var json = [{ "MenuCode": "S0-3100-00", "MenuAction": "TelPay", "MenuName": "通讯费", "subMenu": [{ "MenuCode": "S0-3100-01", "MenuAction": "ChinaMobileTelBalQryInitAct", "MenuName": "中国移动" }, { "MenuCode": "S0-3100-02", "MenuAction": "UnicomTelBalQryInitAct", "MenuName": "中国联通" }, { "MenuCode": "S0-3100-03", "MenuAction": "TelecomTelBalQryInitAct", "MenuName": "中国电信" }] }, { "MenuCode": "S0-3200-00", "MenuAction": "PowerPayInitAct", "MenuName": "电费", "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": "购电卡补写" }] }, { "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": "取暖费", "subMenu": [{ "MenuCode": "S0-3300-04", "MenuAction": "JinNengHeatingQryInitAct", "MenuName": "天津能源缴费" }] }, { "MenuCode": "S0-3400-00", "MenuAction": "CablePayInitAct", "MenuName": "有线电视费", "subMenu": [{ "MenuCode": "S0-3400-01", "MenuAction": "GuangDianCableQryInitAct", "MenuName": "广电有线缴费" }, { "MenuCode": "S0-3400-02", "MenuAction": "TedaCableQryInitAct", "MenuName": "泰达有线缴费" }] }, { "MenuCode": "S0-3000-01", "MenuAction": "ETCLoadInitAct", "MenuName": "ETC卡充值" }, { "MenuCode": "S0-3500-00", "MenuAction": "WaterPayInitAct", "MenuName": "水费", "subMenu": [{ "MenuCode": "S0-3500-01", "MenuAction": "JinNanWaterQryInitAct", "MenuName": "津南水费缴费" }] }, { "MenuCode": "S0-3000-03", "MenuAction": "GasPayInitAct", "MenuName": "燃气费" }, { "MenuCode": "S0-3000-04", "MenuAction": "CommonPayInitAct", "MenuName": "通用缴费" }, { "MenuCode": "S0-3600-00", "MenuAction": "CityCardInitAct", "MenuName": "城市一卡通充值", "subMenu": [{ "MenuCode": "S0-3600-01", "MenuAction": "CityCardPayInitAct", "MenuName": "城市卡充值" }, { "MenuCode": "S0-3600-02", "MenuAction": "CityCardRewriteInitAct", "MenuName": "城市卡补写卡" }] }, { "MenuCode": "S0-3000-05", "MenuAction": "SocialSecurityQryInitAct", "MenuName": "社保缴费" }]; </script> <script type="text/javascript"> /** * Author : 落雨 * 递归查询JSON树 父子节点 */ var parentNode = null; var node = null; /** * 根据NodeID查找当前节点以及父节点 * * @param {[type]} * @param {[type]} * @return {[type]} */ function getNode(json, nodeId) { //1.第一层 root 深度遍历整个JSON for (var i = 0; i < json.length; i++) { if (node) { break; } var obj = json[i]; //没有就下一个 if (!obj || !obj.MenuCode) { continue; } //2.有节点就开始找,一直递归下去 if (obj.MenuCode == nodeId) { //找到了与nodeId匹配的节点,结束递归 node = obj; break; } else { //3.如果有子节点就开始找 if (obj.subMenu) { //4.递归前,记录当前节点,作为parent 父亲 parentNode = obj; //递归往下找 getNode(obj.subMenu, nodeId); } else { //跳出当前递归,返回上层递归 continue; } } } //5.如果木有找到父节点,置为null,因为没有父亲 if (!node) { parentNode = null; } //6.返回结果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' ]; //打印结果 for (var i = 0; i < query.length; i++) { node = null; parentNode = 

转载于:https://www.cnblogs.com/web-chuanfa/p/11219980.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值