あなたが必要とする唯一のJavaScriptの並べ替えガイド


目次

  • Hello Reader
  • JavaScript's sort() function
  • Implementation History
  • Sorting Primitives
  • Array of Strings
  • Array of Numbers
  • Compare Function
  • Descending Order
  • Sorting an Array of Objects
  • Final Thoughts
  • ハローリーダー👋🏽


    JavaScriptで使っているどんなデータでもソートする方法がわからないときに、Googleを検索するのに飽きたので、私は1つの場所でそれをすべて書くことに決めました.
    今日はJavaScriptのソートについて学びます.の使用履歴とアルゴリズム.sort() . それからプリミティブとオブジェクトを分類する方法を学んでください.ジャンプしましょう!

    JavaScriptのsort ()関数📏


    The .sort() 関数は場所に配列をソートする(コピーが行われないことを意味する).ソートされた配列を返す.使用するアルゴリズムを変更できません.sort() , しかし、私たちは、配列要素をcompare function .
    // Native, without a compare function
    sort()
    
    // With an arrow pointing compare function
    sort((a, b) => {
     ...
    })
    
    // Passing a compare function
    sort(compareFn)
    

    実施履歴


    Chromeでは、昔の昔、ソートアルゴリズムは今日ほど良くはなかった.その前の実装の1つは挿入ソートO ( N 2 )を含んでいた🤢.
    今日、私たちはマージソートの変更により、より良い状態になっています.😊. 最初に適応ピューターソートバリアントとして時間ピータースによって作成されます.

    A stable sorting algorithm means if two values of the same value sit next to each other, they maintain the same order after sorting. You'd be surprised how many algorithms depend on this.


    プリミティブのソート


    プリミティブをソートする方法.sort() .

    文字列の配列のソート


    The sort() 関数はどのように文字列を期待しますか.
    const names = ["Darui", "Bee", "Naruto", "Ada", "Sasuke", "Baki", "A"];
    
    console.log(names.sort());
    
    // Output: ["A", "Ada", "Baki", "Bee", "Darui", "Naruto", "Sasuke"]
    
    JavaScriptのデフォルトのソートで辞書式.辞書の順序は、辞書のようなアルファベット順にソートソートを意味します.つのストリングが等しいならば、最も短いものは最初に置かれます.
    // Lexicographical order
    const str = ["aab", "ba", "aac", "bab", "aaa", "Aab", "aaaa"];
    
    // Results
    "Aab" // Uppercase letters take precedence
    "aa|a"
    "aa|aa" // Is equal to "aaa" but is longer
    "aa|b" // The 3rd char 'b' comes the third char 'a' in the strings above.
    "aa|c" // The last char 'c' comes after 'b'
    "ba" // The first char 'b' comes after 'a' in the above strings
    "bab"
    

    数の配列をソートする🧮


    使用.sort() 数は少しトリッキーです.それはネイティブに動作しません.
    const scores = [9, 80, 19, 4, 20, 53];
    
    // Wrong ❌
    console.log(scores.sort());
    
    // Wrong order 👎🏽
    // Output: [19, 20, 4, 53, 80, 9]
    
    デフォルトでは、JavaScriptは辞書順でソートされます.文字列に最適ですが、数字のひどい.私たちはcompare function .
    誰が最初にソートされますか?

    機能比較


    関数解釈の比較
    The compare function 整数を返す.sort() を使用して、要素を比較するときの順序を決定します.
    function compareNumbers(a, b) {
      if (a < b) {
        return -1; // sort a before b
      } else if (a > b) {
        return 1; // sort a after b
      }
    
      return 0; // keep a and b in the same order
    }
    
    つの要素がcompare function , を返します.a を置く.を返します.b を置く.結果が0に等しい場合はa and b 同じ順序で.エクストラ.a(3) - b(2) は1を置くb(2) 前にa(3) .
    番号を適切にソートするには、compare function 数字を昇順にソートする.
    let scores = [9, 80, 19, 4, 20, 53];
    
    // Sort in ascending order ✅
    scores.sort((a, b) => {
      return a - b;
    });
    
    console.log(scores);
    
    // Output: [4, 9, 19, 20, 53, 80]
    

    降順


    降順は簡単に1行の変更です.代わりにa - b , 用途b - a を返します.我々を取るa(3) - b(2) 以前からの例.我々がそれを変えるならばb(2) - a(3) , - 1を得る.代わりにa(3) 前にb(2) .
    let scores = [9, 80, 19, 4, 20, 53];
    
    // Sort in descending order
    scores.sort((a, b) => {
      return b - a;
    });
    
    console.log(scores);
    
    // Output: [80, 53, 20, 19, 9, 4]
    

    オブジェクトの配列のソート🏎️


    JavaScriptでは、オブジェクトはkey:value
    // Array of objects with two properties, 'name' and 'titansDefeated'.
    const characters = [{
        name: 'eren',
        titansDefeated: 1
      },
      {
        name: 'mikasa',
        titansDefeated: 20
      },
      {
        name: 'levi',
        titansDefeated: 90
      },
      {
        name: 'armin',
        titansDefeated: 10
      },
    ];
    
    オブジェクトは複数のプロパティを持っているのでcompare function 必要なプロパティを並べ替えます.
    量による分類titansDefeated 昇順で.
    const characters = [{
        name: 'eren',
        titansDefeated: 1
      },
      {
        name: 'mikasa',
        titansDefeated: 20
      },
      {
        name: 'levi',
        titansDefeated: 90
      },
      {
        name: 'armin',
        titansDefeated: 10
      },
    ];
    
    characters.sort((a, b) => {
      return a.titansDefeated - b.titansDefeated;
    });
    
    console.log(characters);
    
    // Output: [{
    //  name: "eren",
    //  titansDefeated: 1
    // }, {
    //  name: "armin",
    //  titansDefeated: 10
    // }, {
    //  name: "mikasa",
    //  titansDefeated: 20
    // }, {
    //  name: "levi",
    //  titansDefeated: 90
    // }]
    
    量による分類titansDefeated 降順で.
    const characters = [{
        name: 'eren',
        titansDefeated: 1
      },
      {
        name: 'mikasa',
        titansDefeated: 20
      },
      {
        name: 'levi',
        titansDefeated: 90
      },
      {
        name: 'armin',
        titansDefeated: 10
      },
    ];
    
    characters.sort((a, b) => {
      return b.titansDefeated - a.titansDefeated;
    });
    
    console.log(characters);
    
    // Output: [{
    //  name: "levi",
    //  titansDefeated: 90
    // }, {
    //  name: "mikasa",
    //  titansDefeated: 20
    // }, {
    //  name: "armin",
    //  titansDefeated: 10
    // }, {
    //  name: "eren",
    //  titansDefeated: 1
    // }]
    
    ソートnames 辞書順で.
    const characters = [{
        name: 'eren',
        titansDefeated: 1
      },
      {
        name: 'mikasa',
        titansDefeated: 20
      },
      {
        name: 'levi',
        titansDefeated: 90
      },
      {
        name: 'armin',
        titansDefeated: 10
      },
    ];
    
    // Sort names in case-insensitive
    // lexicographical order
    characters.sort((a, b) => {
      // Convert to uppercase so we don't have
      // to worry about case differences.
      const nameA = a.name.toUpperCase();
      const nameB = b.name.toUpperCase();
    
      if (nameA < nameB) {
        return -1;
      }
      if (nameA > nameB) {
        return 1;
      }
    
      // names must be equal
      return 0;
    });
    
    console.log(characters);
    
    // Output:[{
    //  name: "armin",
    //  titansDefeated: 10
    // }, {
    //  name: "eren",
    //  titansDefeated: 1
    // }, {
    //  name: "levi",
    //  titansDefeated: 90
    // }, {
    //  name: "mikasa",
    //  titansDefeated: 20
    // }]
    
    リーバイスは言った

    最後の思考💭


    ここではすべてのJavaScriptで1つの場所でソートするために必要なすべてです.クロムでは.sort() は、ティムソートアルゴリズムを使用して実装されます.デフォルトで.sort() 文字列のために大きいが、他の何のためにでもそれほどでない、辞書上の順序のソート.私たちはcompare function 番号とオブジェクトの並べ替え順序を定義します.
    私はグレゴリーゲインズ、Googyソフトウェアエンジニア@ Googleの良い記事を書いている.あなたがより多くの内容が欲しいならば、Twitterで私について来てください.
    今すぐ何か偉大な作成に行く!何か質問があれば、Twitterで私を殴ってください私たちはそれについて話すことができます.
    読書ありがとう!