47

どうすれば実装できますか

 ORDER BY sort1 DESC, sort2 DESC

次のような JSON 配列のロジック:

    var items = '[
          {
            "sort1": 1,
            "sort2": 3,
            "name" : "a",
          },
          {
            "sort1": 1,
            "sort2": 2,
            "name" : "b",
          },
          {
            "sort1": 2,
            "sort2": 1,
            "name" : "c",
          }
    ]';

新しい順序になります:

b,a,c
4

3 に答える 3

112

それに応じて並べ替え関数を設計する必要があります。

items.sort(function(a, b) {
  return a.sort1 - b.sort1  ||  a.sort2 - b.sort2;
});

(||演算子の優先順位は 1 よりも低いため-、ここで括弧を使用する必要はありません)。

ロジックは単純ですa.sort1 - b.sort1。expression が 0 と評価された場合 (これらのプロパティが等しい場合)、expression の評価を続行し||、 の結果を返しa.sort2 - b.sort2ます。

補足として、あなたitemsは実際には文字列リテラルであるJSON.parseため、配列を取得する必要があります。

const itemsStr = `[{
    "sort1": 1,
    "sort2": 3,
    "name": "a"
  },
  {
    "sort1": 1,
    "sort2": 2,
    "name": "b"
  },
  {
    "sort1": 2,
    "sort2": 1,
    "name": "c"
  }
]`;
const items = JSON.parse(itemsStr);
items.sort((a, b) => a.sort1 - b.sort1 || a.sort2 - b.sort2);
console.log(items);

于 2012-11-03T17:37:40.127 に答える
0

const itemsStr = `[{
    "sort1": 1,
    "sort2": 3,
    "name": "a"
  },
  {
    "sort1": 1,
    "sort2": 2,
    "name": "b"
  },
  {
    "sort1": 2,
    "sort2": 1,
    "name": "c"
  }
]`;
const items = JSON.parse(itemsStr);
items.sort((a, b) => a.sort1 - b.sort1 || a.sort2 - b.sort2);
console.log(items);

于 2019-11-22T02:36:09.507 に答える