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; }; };
逻辑说明
- 拆分路径:用
split('.')把嵌套属性字符串拆成路径数组,把'to.name'转化为可逐层访问的['to', 'name']。 - 安全取值:通过循环遍历路径数组,从根对象开始一步步拿到嵌套属性的值,同时处理中途可能出现的
null或undefined,避免运行报错。 - 正常排序:拿到对应路径的
valA和valB后,沿用你原来的比较逻辑完成排序。
修改后调用sortBy('to.name')就能正确获取每个对象里to.name的值,实现按该属性排序。
内容的提问来源于stack exchange,提问作者Sonam
相关产品推荐
相关产品推荐

