You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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));
  });
};

代码逻辑说明

  1. 路径标准化:通过正则表达式把extraIdentifiers[National ID]这类格式转换成extraIdentifiers.National ID,统一用点作为层级分隔符。
  2. 分割键数组:把标准化后的路径按点分割成数组,比如extraIdentifiers.National ID会拆成['extraIdentifiers', 'National ID']。
  3. 逐层访问属性:用reduce方法从原始对象开始,一层一层往下嵌套访问属性。如果中间某一层对象不存在,直接返回undefined避免报错。
  4. 兼容带空格的键:对每个键做trim()处理,确保像National ID这种带空格的属性名能正确匹配。

测试验证

  • 调用sortPatient('givenName'):正常输出Krishnan、Dale、David
  • 调用sortPatient('extraIdentifiers.National ID'):输出NAT2804、NAT2805、NAT2806
  • 调用sortPatient('extraIdentifiers[National ID]'):同样能正确返回对应的National ID值

内容的提问来源于stack exchange,提问作者krishnanspace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:13:02