簡體   English   中英

Javascript:對字符串數字數組進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM