JavaScriptで配列をソートするとき、nullなどが入っていると、うまくソートされないことがあります。
そこで、ソートするための関数を作りました。
var compare = (a, b, desc = true) => { if (a !== a && b !== b) return 0; if (a !== a) return 1; if (b !== b) return -1; if (a == null && b == null) return 0; if (a == null) return 1; if (b == null) return -1; if (a === '' && b === '') return 0; if (a === '') return 1; if (b === '') return -1; var sig = desc ? 1 : -1; return a < b ? sig : (a > b ? -sig : 0); }
用途としては、テーブルをカラムごとにソートするような場合を想定しているので、降順であろうと、昇順であろうと、NaN, null, undefined, 空文字は後に持ってくるようにしています。
これを使って、
arr.sort((a, b) => compare(a, b)); // 降順 arr.sort((a, b) => compare(a, b, false)); // 昇順
のようにします。