如何在JavaScript中排序Map?


在JavaScript中,Map是一種資料結構,它以鍵值對的形式儲存值。它可以儲存所有型別的資料,無論是原始型別還是JavaScript物件。它按照插入元素的順序儲存元素,因此,當我們迭代其元素時,它會按照我們儲存元素的相同順序列印元素。

正如我們所討論的,Map中儲存的元素順序與我們在該Map中插入元素的順序相同。但是,我們也可以根據不同鍵的值按任何順序對Map的元素進行排序。我們可以使用JavaScript的自定義sort()方法根據儲存的鍵值對Map元素進行排序。

語法

下面的語法將向您展示如何在JavaScript中建立一個Map:

var map_name = new Map([...myMap].sort(cmp));

這裡map_name是已排序的Map,myMap是原始Map,cmp是用於比較Map中兩個值的比較函式。

步驟

按照以下步驟在JavaScript中排序Map:

  • 步驟1 - 定義一個包含一些預設值的Map。

var myMap = new Map([
   [20, 8],
   [9, 5],
   [3, 9],
   [13, 0],
]);
  • 步驟2 - 定義一個比較函式。此函式用於比較兩個元素。

function cmp(a, b) {
   return a[0] - b[0];
}
function cmp(a, b) {
   return a[0] - b[0];
}
  • 步驟3 - 使用Map()建構函式從現有的Map myMap建立一個新的物件sortedMap。此步驟包含三個子步驟:

  • 步驟3.1 - 首先,使用展開語法[…myMap]透過將Map myMap的元素展開到陣列中來建立一個數組。

  • 步驟3.2 - 接下來,呼叫sort()函式並傳入比較函式cmp。

  • 步驟3.3 - 最後,使用Map建構函式構造一個新的Map sortedMap。sortedMap包含已排序的陣列。

sortedMap = new Map([...myMap].sort(cmp));
  • 步驟4 - 顯示Map的已排序元素。

現在讓我們透過程式碼示例來了解如何在JavaScript中排序Map:

示例

下面的示例將向您解釋如何按Map中鍵值的升序或遞增順序對Map進行排序:

<html>
<body>
   <h2>Sorting keys in a map in JavaScript</h2>
   <p id = "prev">The initial order of values of keys in map is:</p>
   <p id = "result">The final sorted order of values of keys in map is:</p>
   <script>
      var result = document.getElementById("result");
      var prev = document.getElementById("prev");
      var myMap = new Map([
         [20, 8],
         [9, 5],
         [3, 9],
         [13, 0],
      ]);

      for (var [key, value] of myMap) {
         prev.innerHTML += " <b> " + key + " </b> ";
      }

      function cmp(a, b) {
        return a[0] - b[0];
      }

      sortedMap = new Map([...myMap].sort(cmp));

      for (var [key, value] of sortedMap) {
         result.innerHTML += " <b> " + key + " </b> ";
      }
   </script>
</body>
</html>

在上面的示例中,我們使用了sort()方法,它使用我們用來定義元素排序順序的cmp函式,以升序或遞增順序對元素進行排序。

現在讓我們討論另一個程式碼示例,在這個示例中,我們將按降序或遞減順序對Map的元素進行排序。

方法

此示例和上一個示例的方法幾乎相同,您只需要進行一些小的更改。您需要在上一個演算法中進行的更改是將cmp函式中的返回值從a[0] – b[0]更改為b[0] - a[0]。透過更改此值,它將按遞減或降序對元素進行排序。

示例

下面的示例將說明如何按遞減順序對Map的鍵元素的值進行排序:

<html>
<body>
   <h2>Sorting a map in JavaScript</h2>
   <p>Enter any two numbers:</p>
   <input type = "number" id = "inp1"> <br> <br>
   <input type = "number" id = "inp2"> <br> <br>
   <button id = "btn" onclick = "mapSort()"> click to sort </button>
   <p id = "prev">The initial order of values of keys in map is:</p>
   <p id = "result">The final sorted order of values of keys in map is:</p>
   <script>
      var result = document.getElementById("result");
      var prev = document.getElementById("prev");
      function mapSort() {
         var myMap = new Map([
            [20, 8],
            [9, 5],
            [3, 9],
         ]);
         var inp1 = document.getElementById("inp1");
         var inp2 = document.getElementById("inp2");
         var val1 = inp1.value;
         var val2 = inp2.value;
         var num1 = Number(val1);
         var num2 = Number(val2);
         myMap.set(num1, num2);

         for (var [key, value] of myMap) {
            prev.innerHTML += " <b> " + key + " </b> ";
         }

         function cmp(a, b) {
            return b[0] - a[0];
         }

         myMap = new Map([...myMap].sort(cmp));

         for (var [key, value] of myMap) {
            result.innerHTML += " <b> " + key + " </b> ";
         }
      }
   </script>
</body>
</html>

在上面的示例中,我們透過將cmp函式傳遞給sort()方法,以遞減或降序對Map中儲存的鍵元素的值進行排序,使其首先返回較大的值,然後返回較小的值。

結論

在本文中,我們學習瞭如何使用sort()方法在JavaScript中對Map進行排序。我們已經實際實現了它,並按遞減和遞增順序對Map進行了排序。

更新於:2023年11月20日

1K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.