jsh*_*ers 7 javascript sorting
试图弄清楚如何正确排列字母等级的数组['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'F']。标准排序功能不起作用。我也希望在不为每个字母等级设置手动索引的情况下执行此操作。
const grades = ['B+', 'F', 'A-', 'A+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'A']
grades.sort((a, b) => {
return a - b;
});
console.log(grades);Run Code Online (Sandbox Code Playgroud)
预期产量:
['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'F']
您可以分开成绩,并为后缀符号取一个对象。
const grades = ['B+', 'A', 'A-', 'A+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'F']
grades.sort((a, b) => {
const order = { '+': -1, '-': 1, undefined: 0 };
return a[0].localeCompare(b[0]) || order[a[1]] - order[b[1]];
});
console.log(...grades);Run Code Online (Sandbox Code Playgroud)
实际上比您想象的要简单:
const grades = ['B+', 'F', 'A-', 'A+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'A']
res = grades
.map(x => x + ',')
.sort()
.map(x => x.slice(0, -1))
console.log(res.join())Run Code Online (Sandbox Code Playgroud)
“魔术师”这里是,是权利之间+和-在ASCII表,所以A变得A,之间排序A+和A-。
正如Nina所建议的,您还可以将其+,直接放入sort回调中:
const grades = ['B+', 'F', 'A-', 'A+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D', 'D-', 'A']
let cmp = (x, y) => (x > y) - (x < y);
res = grades.sort((x, y) => cmp(x + ',', y + ','))
console.log(...res)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |