1. ホーム
  2. ジャバスクリプト

[解決済み】オブジェクトの配列を複数のフィールドでソートする方法は?

2022-04-02 01:58:13

質問

ここから オリジナル質問 複数のフィールドにソートを適用するにはどうすればよいのでしょうか?

この構造を少し変えて、都市(昇順)& そして価格(降順)をどのように並べ替えるのでしょうか?

var homes = [
    {"h_id":"3",
     "city":"Dallas",
     "state":"TX",
     "zip":"75201",
     "price":"162500"},
    {"h_id":"4",
     "city":"Bevery Hills",
     "state":"CA",
     "zip":"90210",
     "price":"319250"},
    {"h_id":"6",
     "city":"Dallas",
     "state":"TX",
     "zip":"75000",
     "price":"556699"},
    {"h_id":"5",
     "city":"New York",
     "state":"NY",
     "zip":"00010",
     "price":"962500"}
    ];

という点が気に入りました。 回答 一般的な方法を教えてくれた。 このコードを使う予定では、日付や他のものを並べ替えなければなりません。 オブジェクトをquot;prime"する機能は、少し面倒ではありますが、便利だと思いました。

こんなものを作ってみた 答え しかし、あまりうまくいきません。

どのように解決するのですか?

ゼロに等しくない値になるまで値のデルタを取ることで、連鎖的なソートアプローチを使用することができます。

var data = [{ h_id: "3", city: "Dallas", state: "TX", zip: "75201", price: "162500" }, { h_id: "4", city: "Bevery Hills", state: "CA", zip: "90210", price: "319250" }, { h_id: "6", city: "Dallas", state: "TX", zip: "75000", price: "556699" }, { h_id: "5", city: "New York", state: "NY", zip: "00010", price: "962500" }];

data.sort(function (a, b) {
    return a.city.localeCompare(b.city) || b.price - a.price;
});

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

あるいは、es6を使って、シンプルに。

data.sort((a, b) => a.city.localeCompare(b.city) || b.price - a.price);