文字列,数値,真偽値を持つ配列をsortメソッドで並び替えるなら次のような比較関数を使って並び替える。
const n = ["m", "M", "aa", true, "a", 4, 8, 42, "A", false];
console.log(n);
n.sort(function(a, b) {
if (a === b) {
return 0;
}else if (typeof a === typeof b) {
return a < b ? -1 : 1;
}else{
return typeof a < typeof b ? -1 : 1;
}
});
console.log(n);
/*
Array(10) [ "m", "M", "aa", true, "a", 4, 8, 42, "A", false ]
Array(10) [ false, true, 4, 8, 42, "A", "M", "a", "aa", "m" ]
*/
配列の要素が文字列,真偽値,数値の場合に並び替えを行う。
文字列が英語の場合は英語の小文字の次に英語の大文字が並ぶようにする。
const n = ["cい","あb","あA","あB","Hello", 100,"Cい","1A", "101", "200", true, "1a", "hello", "あa", "b9", 1, "B9", 12, "A", false, "う", "海","22","2",1,11];
console.log("---sort前---");
n.forEach((element, i) => {
console.log("n[" + i + "] = " + element);
});
/*
配列の要素が文字列,真偽値,数値の場合に並び替えを行う。
文字列が英語の場合は,英語の小文字の次に英語の大文字が並ぶようにする。
*/
n.sort(function(a, b) {
if (a === b) {
return 0;
} else if (typeof a === "string" && typeof b === "string") {
const lowerA = a.toLowerCase();
const lowerB = b.toLowerCase();
if (lowerA < lowerB) {
return -1;
} else if (lowerA > lowerB) {
return 1;
} else if (a < b) {
return 1;
} else if (a > b) {
return -1;
} else {
return 0;
}
} else if (typeof a === typeof b) {
return a < b ? -1 : 1;
} else {
return typeof a < typeof b ? -1 : 1;
}
});
console.log("---sort後---");
n.forEach((element, i) => {
console.log("n[" + i + "] = " + element);
});
/*
---sort前---
n[0] = cい
n[1] = あb
n[2] = あA
n[3] = あB
n[4] = Hello
n[5] = 100
n[6] = Cい
n[7] = 1A
n[8] = 101
n[9] = 200
n[10] = true
n[11] = 1a
n[12] = hello
n[13] = あa
n[14] = b9
n[15] = 1
n[16] = B9
n[17] = 12
n[18] = A
n[19] = false
n[20] = う
n[21] = 海
n[22] = 22
n[23] = 2
n[24] = 1
n[25] = 11
---sort後---
n[0] = false
n[1] = true
n[2] = 1
n[3] = 1
n[4] = 11
n[5] = 12
n[6] = 100
n[7] = 101
n[8] = 1a
n[9] = 1A
n[10] = 2
n[11] = 200
n[12] = 22
n[13] = A
n[14] = b9
n[15] = B9
n[16] = cい
n[17] = Cい
n[18] = hello
n[19] = Hello
n[20] = あa
n[21] = あA
n[22] = あb
n[23] = あB
n[24] = う
n[25] = 海
*/