JavaScript按None/Low/Medium/High顺序重排嵌套数组
实现思路
- 先定义目标顺序的权重映射,把每个等级对应到从小到大的数字,数字越小排序越靠前
- 将原数组拆分为表头和数据行两部分
- 用权重映射对数据行做升序排序,自动适配缺失项的场景
- 最后把表头和排序后的数据行拼接成最终数组
完整可运行代码
// 定义排序优先级:数值越小排序越靠前 const levelPriority = { 'None': 0, 'Low': 1, 'Medium': 2, 'High': 3 }; function sortExposureLevel(exposureLevel) { // 拆分表头与数据行 const [header, ...dataRows] = exposureLevel; // 按优先级排序数据行 const sortedRows = dataRows.sort((rowA, rowB) => { // 取每行第一个元素作为等级,获取对应优先级做差实现排序 return levelPriority[rowA[0]] - levelPriority[rowB[0]]; }); // 拼接返回结果 return [header, ...sortedRows]; } // 测试示例 const test1 = [["Exposure Level","Number"],["Low",38],["Medium",105]]; console.log(sortExposureLevel(test1)); // 输出 [["Exposure Level","Number"],["Low",38],["Medium",105]] const test2 = [["Exposure Level","Number"],["High",15],["None",156]]; console.log(sortExposureLevel(test2)); // 输出 [["Exposure Level","Number"],["None",156],["High",15]] const test3 = [["Exposure Level","Number"],["High",15],["Medium",105],["None",156]]; console.log(sortExposureLevel(test3)); // 输出 [["Exposure Level","Number"],["None",156],["Medium",105],["High",15]]
补充说明
如果你的源数据可能出现不在指定等级里的异常值,可以给优先级加兜底值,避免排序出错:
// 异常值默认排到最后 return (levelPriority[rowA[0]] ?? 999) - (levelPriority[rowB[0]] ?? 999);
内容的提问来源于stack exchange,提问作者geojoe
相关产品推荐
相关产品推荐

