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

JavaScript排序函数中嵌套对象键字符串解析失败的解决咨询

解决嵌套属性的排序问题

你的问题在于a[key]中的key是字符串'to.name'时,JavaScript会直接去对象里找名为'to.name'的属性,而不是先取to属性再访问它的name属性。要支持这种点分隔的嵌套路径,需要修改sortBy函数,让它能解析路径并逐层获取对应值:

修改后的sortBy函数

const sortBy = (key) => {
  // 将点分隔的key拆分成路径数组,比如'to.name' -> ['to', 'name']
  const path = key.split('.');
  
  // 辅助函数:根据路径从对象中逐层取值
  const getValue = (obj) => {
    let result = obj;
    for (const segment of path) {
      // 中途遇到null/undefined直接返回,避免报错
      if (result == null) return result;
      result = result[segment];
    }
    return result;
  };
  
  return (a, b) => {
    const valA = getValue(a);
    const valB = getValue(b);
    
    if (valA > valB) {
      return 1;
    } else if (valB > valA) {
      return -1;
    }
    return 0;
  };
};

逻辑说明

  1. 拆分路径:用split('.')把嵌套属性字符串拆成路径数组,把'to.name'转化为可逐层访问的['to', 'name']。
  2. 安全取值:通过循环遍历路径数组,从根对象开始一步步拿到嵌套属性的值,同时处理中途可能出现的null或undefined,避免运行报错。
  3. 正常排序:拿到对应路径的valA和valB后,沿用你原来的比较逻辑完成排序。

修改后调用sortBy('to.name')就能正确获取每个对象里to.name的值,实现按该属性排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:05:27