[英]Javascript: Sort an array of String numbers
我有一系列如下所示的學校成績
(注'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
知道我該如何解決這個問題嗎?
const toSort = ['1', '3', '4', '5', '6', '7', '9', '10', '11', '12', 'K', '2', 'N', '8']; const test = toSort.sort((a, b) => { // console.log('a ' + a + ' b ' + b); if (a === "K" || b === "N") { return -1; } if (a === "N" || b === "K") { return 1; } return +a - +b; }); console.log(test)
我會這樣做:
const toSort = ['1', '3', '4', '5', '6', '7', '9', '10', '11', '12', 'K', '2', 'N', '8']; const transform = k => { if (k === 'K') return 0; else if (k === 'N') return 13; else return +k; } const test = toSort.sort((a, b) => transform(a) - transform(b)); console.log(test);
如果您的字母與這些特定數字沒有相關性,而是始終是最大和最小的,您可以在transform
函數上使用Infinity
和-Infinity
。
const transform = k => {
if (k === 'K') return -Infinity;
else if (k === 'N') return Infinity;
else return +k;
}
我認為這對你有幫助
const toSort = ['1','3','4','5','6','7','9','10','11','12','K','2','N','8']; toSort.sort(function(a, b) { if(a == 'K') { return -1; // always K is smaller } if(a == 'N') { return 1 // always N is bigger } if(b == 'K') { return 1; } if(b == 'N') { return -1 } return Number(a) - Number(b); }); console.log(toSort);
您可以像這樣使用字符串的原生原型localeCompare
函數:
['1', '3', '4', '5', '6', '7', '9', '10', '11', '12', 'K', '2', 'N', '8']
.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))
// ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "K", "N"]
它也適用於其他字符中的數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.