如何在没有手动索引的情况下对Javascript中的字母等级进行排序

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']

Nin*_*olz 8

您可以分开成绩,并为后缀符号取一个对象。

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)


geo*_*org 8

实际上比您想象的要简单:

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)

cmp穷人代替操作员的地方在哪里<=>