Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptの複数のプロパティでオブジェクトの配列を並べ替える


このようなオブジェクトの配列があるとします-

const arr = [
   { id: 1, score: 1, isCut: false, dnf: false },
   { id: 2, score: 2, isCut: false, dnf: false },
   { id: 3, score: 3, isCut: false, dnf: false },
   { id: 4, score: 4, isCut: false, dnf: false },
   { id: 5, score: 5, isCut: true, dnf: true },
   { id: 6, score: 6, isCut: true, dnf: false },
   { id: 7, score: 7, isCut: true, dnf: false },
   { id: 8, score: 8, isCut: true, dnf: false },
   { id: 9, score: 9, isCut: true, dnf: false },
   { id: 10, score: 0, isCut: false, dnf: false },
   { id: 11, score: -1, isCut: false, dnf: false },
   { id: 12, score: -2, isCut: false, dnf: true },
   { id: 13, score: -3, isCut: false, dnf: false },
   { id: 14, score: -4, isCut: false, dnf: false },
   { id: 15, score: -5, isCut: false, dnf: false },
   { id: 16, score: 10, isCut: true, dnf: false }
];

上記の配列を次の基準で並べ替える必要があります-

dnfがtrueの場合、

object goes to bottom; all dnf-objects should be sorted by score

問題が本当なら

object goes to bottom, but above dnfs; all isCut-objects should be sorted by score

残りはスコアでソートする必要があり、スコアが等しい場合はidでソートする必要があります

このためのコードは-

になります
const arr = [
   { id: 1, score: 1, isCut: false, dnf: false },
   { id: 2, score: 2, isCut: false, dnf: false },
   { id: 3, score: 3, isCut: false, dnf: false },
   { id: 4, score: 4, isCut: false, dnf: false },
   { id: 5, score: 5, isCut: true, dnf: true },
   { id: 6, score: 6, isCut: true, dnf: false },
   { id: 7, score: 7, isCut: true, dnf: false },
   { id: 8, score: 8, isCut: true, dnf: false },
   { id: 9, score: 9, isCut: true, dnf: false },
   { id: 10, score: 0, isCut: false, dnf: false },
   { id: 11, score: -1, isCut: false, dnf: false },
   { id: 12, score: -2, isCut: false, dnf: true },
   { id: 13, score: -3, isCut: false, dnf: false },
   { id: 14, score: -4, isCut: false, dnf: false },
   { id: 15, score: -5, isCut: false, dnf: false },
   { id: 16, score: 10, isCut: true, dnf: false }
];
const sortComplex = (arr = []) => {
   arr.sort(function (a, b) {
      const order = (dnf, isCut) => {
         return [0, 1, 3, 2][dnf * 2 + isCut];
      }
      return order(a.dnf, a.isCut) - order(b.dnf, b.isCut) || b.score - a.score;
   });
};
sortComplex(arr);
console.log(arr);

出力

そして、コンソールの出力は-

になります
[
   { id: 4, score: 4, isCut: false, dnf: false },
   { id: 3, score: 3, isCut: false, dnf: false },
   { id: 2, score: 2, isCut: false, dnf: false },
   { id: 1, score: 1, isCut: false, dnf: false },
   { id: 10, score: 0, isCut: false, dnf: false },
   { id: 11, score: -1, isCut: false, dnf: false },
   { id: 13, score: -3, isCut: false, dnf: false },
   { id: 14, score: -4, isCut: false, dnf: false },
   { id: 15, score: -5, isCut: false, dnf: false },
   { id: 16, score: 10, isCut: true, dnf: false },
   { id: 9, score: 9, isCut: true, dnf: false },
   { id: 8, score: 8, isCut: true, dnf: false },
   { id: 7, score: 7, isCut: true, dnf: false },
   { id: 6, score: 6, isCut: true, dnf: false },
   { id: 5, score: 5, isCut: true, dnf: true },
   { id: 12, score: -2, isCut: false, dnf: true }
]
>
  1. JavaScript-配列オブジェクトの長さ

    JavaScriptのlengthプロパティは、オブジェクトのサイズを返します。以下は、文字列および配列オブジェクトの長さのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document

  2. JavaScriptのArray.prototype.sort()。

    JavaScript Array.prototype.sort()メソッドは、配列の並べ替えに使用されます。並べ替えの順序は、アルファベット、数字、昇順、降順のいずれかです。 以下は、Array.prototype.sort()メソッドのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-