バラバラのデータ配列を整列させる方法

*2/24 以前よりも短くシンプルなコードに修正いたしました。

前回、標準偏差を求める方法について書いたのですが、課題の中で中央値を求める問題があり、データを自分で見比べて並び替えるのがまた面倒だったので、データを大きい順に並び替える方法をまとめました。

前回同様、データのサンプルとして、実際に課題で使ったものを使用していきます。

dataset: 288.02, 230.60, 216.85, 243.74, 236.96, 288.57, 311.20, 370.23, 368.57, 301.79,271.99, 298.12

まずこれらのデータを配列に入れます。

const dataset = [288.02, 230.60, 216.85, 243.74, 236.96, 288.57, 311.20, 370.23, 368.57, 301.79, 271.99, 298.12];
// データの順番は適当でOK

データの整列で使うメソッドはsort()です。

sort()を使ってデータを小→大の順に並べるコードがこちらになります。

*以下のコードが修正後のコードになります*

dataset.sort((a,b) => {
return a-b
});
 
//実行結果: [216.85, 230.6, 236.96, 243.74, 271.99, 288.02, 288.57, 298.12, 301.79, 311.2, 368.57, 370.23]​

これで完了です。あとは中央値を選ぶor計算するだけです。

理屈なんてどうでもいいって方はこれで終わりです。
下記でコードの内容について説明をしていきます。


sort()は引数に何も指定しないと要素を全て文字列に直してから並び替えます。そのため数字の大きさを認識できず、うまく並び替えることができません。
(20より10000の方が前に来てしまう感じです。)

そのため、自分で並び替えの基準を決める必要があります。

並び替えの基準はcompareFunctionを使います。compareFunctionとはsort()の引数として使われる関数のことです。compareFunctionの中で自分の基準を作成していきます。

今回のコードでcompareFunctionにあたる箇所はこちらです。


(a,b) => {
return a-b
}

compareFunctionは返り値が0より小さい場合、[a,b]の順番で並び替えます。また、返り値が0より大きい場合は[b,a]と並び替えます。

それぞれのデータにおいて"a-b"の計算を行うことで、値の小さいものから大きいものへと並び替えることができます。

これでデータの並び替えが完了です。整列されたデータの中央値を求めることはそこまで面倒ではないので、今回は省かせていただきます。

compareFunctionの中身を応用することでいろいろな整列の仕方が可能になると思います。Web制作で使うことはなかなかないと思いますが、統計などの計算で使う場面が来たときに参考にしてもらえると嬉しいです。

最後まで読んでいただきありがとうございました。

いいなと思ったら応援しよう!