こんな感じの配列があるとします
const items = [
{ id: "6", price: "340", name: "大根" },
{ id: "5", price: "230", name: "ポテト" },
{ id: "1", price: "100", name: "パセリ" },
{ id: "2", price: "340", name: "にんじん" }
]
価格昇順でソートしたい場合
items.sort((a,b)=>a.price - b.price);
単純に価格昇順にしたいのであれば簡単で、これで実現出来ます。
ただし、これだけではpriceが同じものがあった場合idが昇順になってくれず
const items = [
{ id: "1", price: "100", name: "パセリ" },
{ id: "5", price: "230", name: "ポテト" },
{ id: "6", price: "340", name: "大根" },
{ id: "2", price: "340", name: "にんじん" }
]
こうなります。
価格昇順でソート & 同じ価格ならid昇順 にしたいとする
つまりこうしたいです。
const items = [
{ id: "1", price: "100", name: "パセリ" },
{ id: "5", price: "230", name: "ポテト" },
{ id: "2", price: "340", name: "にんじん" },
{ id: "6", price: "340", name: "大根" }
]
実現方法
items.sort((a,b)=> {
if(a.price > b.price) return 1
if(a.price < b.price) return -1
if(a.id > b.id) return 1
if(a.id < b.id) return -1
return 0;
});
このようにして実現出来ます。
もし2つではなく、3つ4つと比較したいキーが増えても条件分岐を増やして行けば良いです。
追記
コメントにて、@hayashi-ay さんより 1行で簡潔に書ける方法を教えて頂きましたので追記しておきます。
items.sort((a,b)=> (a.price - b.price) || (a.id - b.id) );