如何使用 jQuery/JavaScript 比較兩個 JavaScript 陣列物件?


在 JavaScript 中,陣列是一個物件,其索引作為鍵,陣列值作為陣列物件特定鍵的值。有時,我們需要檢查兩個陣列是否相同。

首先想到的解決方案是使用相等運算子並像 array1 == array2 那樣進行比較。糟糕!這行不通,因為陣列是一個物件,我們不能直接在 JavaScript 中比較兩個物件。因此,我們必須比較陣列的每個元素。

在本教程中,我們將學習使用各種方法比較兩個 JavaScript 陣列物件。

使用 JavaScript 的 sort() 方法並比較每個元素

sort() 方法允許我們對 JavaScript 中的陣列值進行排序。之後,我們可以使用 for 迴圈來比較陣列中每個索引處的元素。如果任何索引處的元素不匹配,我們可以說這兩個陣列物件是不同的。

語法

使用者可以按照以下語法使用 sort() 方法和 for 迴圈比較兩個陣列物件。

// sort arrays first
arra1.sort();
array2.sort();
   if (array1.length != array2.length) {
      // arrays are not the same
   } else {
      for () {
         // if elements at index i are not the same, return false
      }
   }
}
// both arrays are the same

演算法

使用者可以按照以下演算法。

  • 步驟 1 − 使用 sort() 方法對兩個陣列進行排序。

  • 步驟 2 − 比較兩個陣列的長度;如果長度不同,則返回 false,表示兩個陣列不相同。

  • 步驟 3 − 如果兩個陣列的長度相同,則使用 for 迴圈遍歷兩個陣列。

  • 步驟 4 − 比較兩個陣列中每個索引處的元素,如果索引處的元素不匹配,則返回 false。

  • 步驟 5 − 如果兩個陣列中的所有元素都匹配,則這兩個陣列相同。

示例

在下面的示例中,我們建立了兩個數字陣列並使用 sort() 方法對它們進行排序。之後,我們使用 for 迴圈比較兩個陣列的每個元素。

在輸出中,使用者可以看到這兩個陣列是相同的,因為兩個陣列包含相同的值。

<html>
<body>
   <h3>Using the <i>array.sort()</i> method and <i>for</i> loop to check if two arrays are the same using JavaScript </h2>
   <button onclick = "checkArray()"> Compare arrays </button>
   <div id = "output"> </div>
   <script>
      let output = document.getElementById('output');
      let array1 = [32, 32, 54, 1, 2, 3, 4];
      let array2 = [1, 2, 3, 4, 32, 54, 32];
      output.innerHTML += "The first array values are " + array1 + "<br>";
      output.innerHTML += "The second array values are " + array2 + "<br>";
      function checkArray() {
         array1.sort();
         array2.sort();
         if (array1.length != array2.length) {
            output.innerHTML += "Both arrays are not same!";
            return false;
         } else {
            for (let i = 0; i < array1.length; i++) {
               if (array1[i] != array2[i]) {
                  output.innerHTML += "Both arrays are not same!";
                  return false;
               }
            }
         }
         output.innerHTML += "Both arrays are the same!";
         return true;
      }
   </script>
</body>
</html>

使用 forEach 迴圈和 indexOf() 方法

我們可以使用 forEach 迴圈遍歷每個陣列元素。indexOf() 方法查詢元素在陣列中的第一次出現,如果引用陣列不包含該元素,則返回 -1。

語法

使用者可以按照以下語法使用 forEach 迴圈和 indexOf() 方法來比較兩個陣列物件。

if (array2.length != array1.length) {
   // array are not the same
   return false;
} else {
   array1.forEach((element) => {
      if (array2.indexOf(element) == -1) {
         return false;
      }
   })
}

演算法

在此演算法中,我們不需要像第一種方法那樣對陣列進行排序。

  • 步驟 1 − 檢查兩個陣列的長度是否相同;如果不是,則返回 false。

  • 步驟 2 − 如果長度相同,則使用 forEach() 迴圈遍歷每個元素。

  • 步驟 3 − 對於 array1 的每個元素,使用 indexOf() 方法檢查它是否在 array2 中存在。

  • 步驟 4 − 如果 indexOf() 方法對任何單個元素返回 -1,則表示這兩個陣列不相同。

示例

在下面的示例中,當用戶單擊按鈕時,它將呼叫 compareArray() 函式。compareArray() 函式比較兩個字串元素陣列。

在輸出中,使用者可以觀察到這兩個陣列不相同,因為兩個陣列的值不同。

<html>
<body>
   <h3>Using the <i>forEach() loop and indexOf() method</i> to check if two arrays are the same using JavaScript </h3>
   <button onclick = "compareArray()"> Compare arrays</button>
   <div id = "output"> </div>
   <script>
      let output = document.getElementById('output');
      let array1 = ["Hello", "Hi", "How"];
      let array2 = ["Are", "You", "!"];
      output.innerHTML += "The first array values are " + array1 + " <br>";
      output.innerHTML += "The second array values are " + array2 + " <br>";
      function compareArray() {
         var isSame = true;
         if (array2.length != array1.length) {
            output.innerHTML += "Both arrays are not same!";
            return false;
         } else {
            array2.forEach((element) => {
               if (array1.indexOf(element) == -1) {
                  isSame = false;
               }
            })
         }
         if (isSame) {
            output.innerHTML += "Both arrays are the same!";
         } else {
            output.innerHTML += "Both arrays are not same!";
         }
         return true;
      }
   </script>
</body>
</html>

我們學習了兩種在 JavaScript 中比較兩個陣列的不同方法。使用者可以使用第一種方法來比較包含重複值的陣列,第二種方法僅用於比較包含唯一值的陣列。

此外,使用者還可以使用 JSON.stringify() 方法來比較物件陣列和排序陣列。

更新於: 2023年1月19日

4K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.