我有一个学校分数的数组,如下所示。
(请注意,“N”表示没有分数,“K”表示幼儿园)
const toSort = ['1','3','4','5','6','7','9','10','11','12','K','2','N','8'];
我想使用JavaScript sort()方法来排列数组,以便它看起来像:
const sorted = ['K','1','2','3','4','5','6','7','8','9','10','11','12','N'];
以下是我的尝试:
(请注意,“N”表示没有分数,“K”表示幼儿园)
const toSort = ['1','3','4','5','6','7','9','10','11','12','K','2','N','8'];
我想使用JavaScript sort()方法来排列数组,以便它看起来像:
const sorted = ['K','1','2','3','4','5','6','7','8','9','10','11','12','N'];
以下是我的尝试:
const toSort = ['1', '3', '4', '5', '6', '7', '9', '10', '11', '12', 'K', '2', 'N', '8'];
toSort.sort();
// Produces: ["1", "10", "11", "12", "2", "3", "4", "5", "6", "7", "8", "9", "K", "N"]
const test = toSort.sort((a, b) => {
if (a === 'K') {
return -1;
}
return Number(a) < Number(b) ? -1 : Number(a) > Number(b) ? 1 : 0;
});
console.log(test)
https://jsbin.com/pocajayala/1/edit?html,js,console,output
我该如何解决这个问题?
'K'
一样,为'N'
做一个特殊情况。然后将其他所有内容转换为Number
。不需要任何三元运算符。 - Code-ApprenticeNumber("K")
和Number("N")
都是NaN
。你只移除了参数a
是"K"
的情况,而没有考虑到b
是"K"
或其中任意一个为"N"
的情况。 - ASDFGerteif (b === "K") return 1; if (a === "N") return 1; if (b === "N") return -1;
。但这仍然存在一个问题,因为如果比较两个相同的 "N"(在测试用例中不会发生),理论上你的排序函数就不正确了。但在我所知道的任何实现中,这并不重要。 - ASDFGerte