如何过滤对象数组中管辖项为纯数字字符串的条目并完成排序?
解决方案
1. 先修正你的排序逻辑
你现在的排序代码缺少返回值,根本无法生效。需要按照jurisdiction→lastName→firstName的优先级依次对比,修正后的代码如下:
supervisorsObj.sort((a, b) => { // 先比管辖项,忽略大小写 const jurisdictionDiff = a.jurisdiction.toLowerCase().localeCompare(b.jurisdiction.toLowerCase()); if (jurisdictionDiff !== 0) { return jurisdictionDiff; } // 管辖项相同就比姓氏 const lastNameDiff = a.lastName.toLowerCase().localeCompare(b.lastName.toLowerCase()); if (lastNameDiff !== 0) { return lastNameDiff; } // 姓氏相同最后比名字 return a.firstName.toLowerCase().localeCompare(b.firstName.toLowerCase()); });
2. 过滤纯数字管辖项
用Array.filter()配合正则/^\d+$/就能筛选掉jurisdiction是纯数字的条目——这个正则会匹配从开头到结尾全是数字的字符串,代码如下:
const filteredList = supervisorsObj.filter(item => !/^\d+$/.test(item.jurisdiction));
完整流程示例
把排序和过滤整合到一起,直接可用的完整代码:
// 假设这是API返回的原始数据 const apiData = { "supervisors": [ { "jurisdiction": "u", "lastName": "Olson", "firstName": "Karson" }, { "jurisdiction": "9", "lastName": "Heller", "firstName": "Robbie" }, { "jurisdiction": "b", "lastName": "Cremin", "firstName": "Elijah" } ] }; // 先复制一份数据避免修改原数组 let supervisors = [...apiData.supervisors]; // 第一步:排序 supervisors.sort((a, b) => { const jurisdictionDiff = a.jurisdiction.toLowerCase().localeCompare(b.jurisdiction.toLowerCase()); if (jurisdictionDiff !== 0) return jurisdictionDiff; const lastNameDiff = a.lastName.toLowerCase().localeCompare(b.lastName.toLowerCase()); if (lastNameDiff !== 0) return lastNameDiff; return a.firstName.toLowerCase().localeCompare(b.firstName.toLowerCase()); }); // 第二步:过滤 const finalList = supervisors.filter(item => !/^\d+$/.test(item.jurisdiction)); console.log(finalList); // 输出结果: // [ // { jurisdiction: 'b', lastName: 'Cremin', firstName: 'Elijah' }, // { jurisdiction: 'u', lastName: 'Olson', firstName: 'Karson' } // ]
内容的提问来源于stack exchange,提问作者George Colt
相关产品推荐
相关产品推荐

