首页 >web前端 >js教程 >如何在 JavaScript 中比较数组和对象是否相等?

如何在 JavaScript 中比较数组和对象是否相等?

Patricia Arquette
Patricia Arquette原创
2024-12-23 18:30:10849浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn