プロパティ値でオブジェクト配列をソートする
javascriptで配列をソートするには、sort()メソッドを使います。
sort()メソッドには並び替えのルールを関数として渡すことができます。例えば、countプロパティを持ったオブジェクトのanimals配列をcountの値でソートするコード例は下記です。
let animals = [ {name: 'dog', count: '2'}, {name: 'cat', count: '4'}, {name: 'bird', count: '1'} ] // countで昇順ソート animals.sort((a, b) => { return a.count - b.count }) console.log(animals) // [ // {name: 'bird', count: '1'}, // {name: 'dog', count: '2'}, // {name: 'cat', count: '4'} // ]
sort()に渡す関数は、数値を返すようにします。負の数を返すとaはbの前、正の数を返すとaはbの後というようにソートされます。
この仕様を使って下のように、あるプロパティがtrueのものだけ先頭に持ってくるというようなこともできます。
let animals = [ {name: 'dog', flag: false}, {name: 'cat', flag: true}, {name: 'bird', flag: false}, {name: 'snake', flag: true} ] // flag=trueを先頭にソート animals.sort((a, b) => { if(a.flag){ return -1 }else{ return 1 } }) console.log(animals) // [ // {name: "snake", flag: true}, // {name: "cat", flag: true}, // {name: "dog", flag: false}, // {name: "bird", flag: false} // ]
sort()について詳細は下記を参照ください。
Array.prototype.sort() - JavaScript | MDN
sort() は Array のメソッドで、配列の要素をその場 (in-place) でソートし、ソートされた同じ配列の参照を返します。既定のソート順は昇順で、要素を文字列に変換してから、 UTF-16 コード単位の値の並びとして比較します...
コメント