首頁 > web前端 > js教程 > 如何在 JavaScript 中高效比較陣列和物件?

如何在 JavaScript 中高效比較陣列和物件?

Mary-Kate Olsen
發布: 2024-12-30 22:11:17
原創
273 人瀏覽過

How to Efficiently Compare Arrays and Objects in JavaScript?

在JavaScript 中高效比較數組

簡介

在數組中比較組可能很值得寫棘手。比較運算子 (==) 無法按預期工作,並且將陣列轉換為 JSON 進行比較可能效率低下。以下是有效比較陣列的綜合指南:

比較陣列

要執行有效的陣列比較,請依照下列步驟操作:

1 。自訂 Equals 方法:

在 Array.prototype 上定義一個名為 equals 的自訂方法。此方法將遞歸比較數組的每個元素。

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; i < this.length; 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;
};
登入後複製

2.用法:

要使用equals 方法比較兩個數組,只需在其中一個數組上調用它,如下所示:

[1, 2, [3, 4]].equals([1, 2, [3, 2]]) === false;
登入後複製

比較對象

部分比較物件是可能的,但你需要注意,兩個物件實例永遠不會相等,即使它們包含相同的內容資料。

1。物件的自訂等於方法:

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

  for (let propName in object2) {
    if (
      this.hasOwnProperty(propName) !==
      object2.hasOwnProperty(propName)
    ) {
      return false;
    } else 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;
};
登入後複製

2.用法:

({ a: 1, foo: "bar", numberOfTheBeast: 666 }).equals({
  a: 1,
  foo: "bar",
  numberOfTheBeast: 666,
}) === false;
登入後複製

帶有indexOf和contains的嵌套數組

對於涉及嵌套數組的更複雜的情況,可以使用indexOf和contains函數來搜尋對於嵌套中的特定物件

結論

透過遵循這些技術,您可以有效地比較JavaScript 中的陣列和對象,解決常見的陷阱,並使您能夠自信地執行此類比較。

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

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