首页 > web前端 > js教程 > 如何在 JavaScript 中高效比较数组和对象?

如何在 JavaScript 中高效比较数组和对象?

Mary-Kate Olsen
发布: 2024-12-30 22:11:17
原创
273 人浏览过

How to Efficiently Compare Arrays and Objects in JavaScript?

在 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板