' P '

whatever I will forget

JavaScript 連想配列のデータをsortする

連想配列にある何かのデータを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 を返す必要があります

要は、
降順にしたいとき: 正の整数を返す
昇順にしたいとき: 負の整数を返す
と覚えておけばいいんじゃないでしょうか!