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; };
オブジェクトを比較する場合、特有の課題が生じます。 2 つのオブジェクト インスタンスは、プロパティが同じであっても、クラス インスタンスが異なるため、等しいとはみなされません。ただし、データ比較のみに焦点を当てている場合は、これは可能です。
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 中国語 Web サイトの他の関連記事を参照してください。