基于JSON内匹配的serial_number对应district、ward及所属类别查询方法
实现思路
- 遍历最外层的地区数组,记录当前遍历对象的
district字段值 - 遍历当前地区下的
ward_no数组,记录当前遍历对象的ward字段值 - 分别遍历当前 ward 对象下的
grievance和general两个子数组,比对每个元素的serial_number和输入的目标序列号 - 匹配到目标序列号后,直接返回记录的
district、ward以及当前子数组的名称即可
代码示例(JavaScript 版本)
// 给定的业务数据 const areaData = [ { "district": "Kolkata", "ward_no": [ { "ward": "6", "grievance": [ { "serial_number": "0001", "name" : "Mr.A" }, { "serial_number": "0002", "name" : "Mr.B" } ], "general": [ { "serial_number": "0003", "name" : "Mr.C" }, { "serial_number": "0004", "name" : "Mr.D" } ] }, { "ward": "7", "grievance": [ { "serial_number": "0005", "name" : "Mr.E" }, { "serial_number": "0006", "name" : "Mr.F" } ], "general": [ { "serial_number": "0007", "name" : "Mr.G" }, { "serial_number": "0008", "name" : "Mr.H" } ] } ] }, { "district": "Hooghly", "ward_no": [ { "ward": "8", "grievance": [ { "serial_number": "0009", "name" : "Mr.I" }, { "serial_number": "0010", "name" : "Mr.J" } ], "general": [ { "serial_number": "0011", "name" : "Mr.K" }, { "serial_number": "0012", "name" : "Mr.L" } ] }, { "ward": "9", "grievance": [ { "serial_number": "0013", "name" : "Mr.M" }, { "serial_number": "0014", "name" : "Mr.N" } ], "general": [ { "serial_number": "0015", "name" : "Mr.O" }, { "serial_number": "0018", "name" : "Bruno Fernandes" } ] } ] } ]; // 查询函数,入参为目标序列号 function getSerialInfo(targetSerial) { // 遍历所有地区 for (const area of areaData) { const currentDistrict = area.district; // 遍历当前地区下的所有 ward for (const wardItem of area.ward_no) { const currentWard = wardItem.ward; // 匹配 grievance 数组 const grievanceHit = wardItem.grievance.find(item => item.serial_number === targetSerial); if (grievanceHit) { return { district: currentDistrict, ward: currentWard, arrayKey: 'grievance' }; } // 匹配 general 数组 const generalHit = wardItem.general.find(item => item.serial_number === targetSerial); if (generalHit) { return { district: currentDistrict, ward: currentWard, arrayKey: 'general' }; } } } // 无匹配返回 null return null; } // 测试:查询序列号 0018 const queryResult = getSerialInfo('0018'); console.log(queryResult); // 输出结果:{ district: 'Hooghly', ward: '9', arrayKey: 'general' }
注意:你给出的示例中输入0018对应ward为8和实际JSON数据不符,实际匹配结果ward为9。
内容的提问来源于stack exchange,提问作者coolhack7
相关产品推荐
相关产品推荐

