【javascript】連想配列を昇順または降順に並び変えるsort() compareFunction()

やりたいこと
以下の連想配列を名前または年齢をもとに昇順/降順に並び変えたいと思います。
const array = [
{
name: "tanaka",
age: 26,
},
{
name: "sato",
age: 36,
},
{
name: "suzuki",
age: 31,
},
{
name: "yamada",
age: 48,
},
{
name: "akita",
age: 24,
},
];
Name | Age |
---|
連想配列(オブジェクト)を昇順にする関数
以下の関数を作ります。kyeはオブジェクトのkyeを入力します。 先ほどの連想配列なら、nameのage 2つがあり、名前を基準に昇順にしたい場合は、a.name, b.name、 年齢を基準に昇順にしたい場合は、a.age, b.age に書き換えます。
function compareKyeAsc(a, b) {
if (a.kye > b.kye) {
return 1;
}
if (a.kye < b.kye) {
return -1;
}
return 0;
}
連想配列(オブジェクト)を降順にする関数
先ほどの関数の+(正)と-(負) を入れ替えるだけです。
function compareKyeDesc(a, b) {
if (a.kye > b.kye) {
return -1;
}
if (a.kye < b.kye) {
return 1;
}
return 0;
}
連想配列を昇順/降順に並び変える
Array.from()で、元の配列を書き換えないようにします。
sort()の引数に、先ほどつくった関数を指定します。
例)sort.(compareNameAsc)
// 名前を基準に昇順
const arrAscName = Array.from(array).sort(compareNameAsc);
function compareNameAsc(a, b) {
if (a.name > b.name) {
return 1;
}
if (a.name < b.name) {
return -1;
}
return 0;
}
// 名前を基準に降順
const arrDescName = Array.from(array).sort(compareNameDesc);
function compareNameDesc(a, b) {
if (a.name > b.name) {
return -1;
}
if (a.name < b.name) {
return 1;
}
return 0;
}
// 年齢を基準に昇順
const arrAscAge = Array.from(array).sort(compareAgeAsc);
function compareAgeAsc(a, b) {
if (a.age > b.age) {
return 1;
}
if (a.age < b.age) {
return -1;
}
return 0;
}
// 年齢を基準に降順
const arrDescAge = Array.from(array).sort(compareAgeDesc);
function compareAgeDesc(a, b) {
if (a.age > b.age) {
return -1;
}
if (a.age < b.age) {
return 1;
}
return 0;
}
参考

