首頁 > web前端 > js教程 > 如何在 JavaScript 中比較陣列和物件是否相等?

如何在 JavaScript 中比較陣列和物件是否相等?

Patricia Arquette
發布: 2024-12-23 18:30:10
原創
848 人瀏覽過

How Do I Compare Arrays and Objects for Equality in JavaScript?

在 JavaScript 中比較數組是否相等

在 JavaScript 中識別數組的相等性可能是一項具有挑戰性的任務。典型的比較運算子 == 在這種情況下是不夠的。相反,我們深入研究物件比較領域,這需要更細緻的方法。

使用循環比較數組

比較數組的直接方法是迭代其元素並驗證它們的元素平等。其實現方式如下:

Array.prototype.equals = function (array) {
  if (!array) return false;
  if (this === array) return true;
  if (this.length !== array.length) return false;

  for (let i = 0, l = this.length; i < l; i++) {
    if (this[i] instanceof Array && array[i] instanceof Array) {
      if (!this[i].equals(array[i])) return false;
    } else if (this[i] !== array[i]) return false;
  }
  return true;
};
登入後複製

比較物件

比較時,物件提出了獨特的挑戰。兩個物件實例,即使具有相同的屬性,也永遠不會被認為是相等的,因為它們的類別實例不同。但是,如果焦點僅在於數據比較,這仍然是可能的:

Object.prototype.equals = function (object2) {
  for (const propName in this) {
    if (this.hasOwnProperty(propName) !== object2.hasOwnProperty(propName)) return false;
    if (typeof this[propName] !== typeof object2[propName]) return false;
  }

  for (const propName in object2) {
    if (this.hasOwnProperty(propName) !== object2.hasOwnProperty(propName)) return false;
    if (typeof this[propName] !== typeof object2[propName]) return false;
    if (!this.hasOwnProperty(propName)) continue;

    if (this[propName] instanceof Array && object2[propName] instanceof Array) {
      if (!this[propName].equals(object2[propName])) return false;
    } else if (this[propName] instanceof Object && object2[propName] instanceof Object) {
      if (!this[propName].equals(object2[propName])) return false;
    } else if (this[propName] !== object2[propName]) {
      return false;
    }
  }

  return true;
};
登入後複製

嵌套數組

對於嵌套數組,Samy Bencherif 的函數提供了一種用於搜尋和比較特定物件的有效方法在多維數組中:https://jsfiddle.net/SamyBencherif/8352y6yw/.

以上是如何在 JavaScript 中比較陣列和物件是否相等?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板