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