如何修改JavaScript函数以动态获取嵌套对象的值(调用方式不变)
解决Angular中获取嵌套对象属性值的问题
遇到这种嵌套路径无法解析的问题,核心是要对传入的路径字符串做分层解析,不管是.分隔还是[]包裹的格式都能兼容处理。我们可以在sortPatient函数里新增一个辅助方法来实现路径解析,无需修改调用方式,直接替换原函数逻辑即可:
$scope.sortPatient = function (param) { // 辅助函数:根据路径字符串获取嵌套对象对应的值 const getNestedValue = (obj, path) => { // 将 [xxx] 格式统一转换为 .xxx,标准化路径格式 const normalizedPath = path.replace(/\[([^\]]+)\]/g, '.$1'); // 按点分割路径为键数组,兼容带空格的键名 const keys = normalizedPath.split('.'); // 逐层遍历键数组,访问对象属性 return keys.reduce((currentObj, key) => { if (!currentObj) return undefined; // 去除键名首尾空格,适配"National ID"这类带空格的属性 const trimmedKey = key.trim(); return currentObj[trimmedKey]; }, obj); }; $scope.results.map(function (currentObj) { console.log(getNestedValue(currentObj, param)); }); };
代码逻辑说明
- 路径标准化:通过正则表达式把
extraIdentifiers[National ID]这类格式转换成extraIdentifiers.National ID,统一用点作为层级分隔符。 - 分割键数组:把标准化后的路径按点分割成数组,比如
extraIdentifiers.National ID会拆成['extraIdentifiers', 'National ID']。 - 逐层访问属性:用
reduce方法从原始对象开始,一层一层往下嵌套访问属性。如果中间某一层对象不存在,直接返回undefined避免报错。 - 兼容带空格的键:对每个键做
trim()处理,确保像National ID这种带空格的属性名能正确匹配。
测试验证
- 调用
sortPatient('givenName'):正常输出Krishnan、Dale、David - 调用
sortPatient('extraIdentifiers.National ID'):输出NAT2804、NAT2805、NAT2806 - 调用
sortPatient('extraIdentifiers[National ID]'):同样能正确返回对应的National ID值
内容的提问来源于stack exchange,提问作者krishnanspace
相关产品推荐
相关产品推荐

