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