連想配列にある何かのデータをsortするときのやり方。
前提
例えば、下記連想配列dataMap
に、a
をキーとして, b,c,num
というデータがあるとします。
やりたいこと
各キーが持っているnum
の値を、値が大きい順(降順)に並び替えたい
const rankingArray = Array.from(DataMap).sort((pair1, pair2) => { return pair2[1].num - pair1[1].num; }); console.log(rankingArray); });
上記のようにすることで可能です。
Array.from()とは?
上記は、連想配列を配列に変換してくれます。
['a', [b: 000, c: 111, num: 123]]
のような感じに変換してくれます。
sort関数とは
並び替えを実行する関数だが、この関数に無名関数を渡すことによって、
そのreturnされた値がどのようにソートするのかの基準となる。
pair1
pair2
と引数を定義し、それらに配列のindexを指定します。
例えば、pair1[0]
を指定するならば、キーであるa
の値が取得できます。
pair1[1]
を指定すれば、b
,c
,num
の値が取れるので、pair1[1]
を指定してる感じですね。
sort基準
- sortをする基準としてはreturnする符号が重要になる
その上で、下記のようなルールがあるようです
前者の引数 pair1 を 後者の引数 pair2 より前にしたいときは、負の整数
pair2 を pair1 より前にしたいときは、正の整数
pair1 と pair2 の並びをそのままにしたいときは 0 を返す必要があります
要は、
降順にしたいとき: 正の整数を返す
昇順にしたいとき: 負の整数を返す
と覚えておけばいいんじゃないでしょうか!