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