2017-08-04 5 views
0

に含まれる()関数を使用して、私は、配列Aを持って、コンソールが私を示しています この場合

Array [ Object, Object ]. 

私はObject要素のいずれかをクリックし

は、プロパティがコンソールに表示されます。

今、変数Bがあります。この変数には、配列Aの最初のオブジェクトが含まれています。私はincludes関数を使ってこれをチェックしたい:

A.includes(B) 

ただし、falseを返します。 includes()の使用に何か問題がありますか?

+2

をおそらくそれは、同じオブジェクトが含ま* *れません。均等に見えるオブジェクトでは不十分であることに注意してください。 – Bergi

答えて

3

私が正しくあなたの質問を理解していれば、セットアップは次のようになります。Javascriptがオブジェクトの参照に基づいてオブジェクトの等価性を評価するため

const A = [ {hello: "world"}, {hi: "everyone"} ]; 
const B = {hello: "world"}; 
console.log(A.includes(B)); // returns false 

A.includes(B) falseを返します(それらが保存されている場所それらの値ではなく)。結果として、BがAに含まれるように見えても、2つのオブジェクトは互いに独立して宣言されるため、異なる参照を持ちます。あなたがここにJavaScriptでのオブジェクトの平等についての詳細を読むことができます:http://adripofjavascript.com/blog/drips/object-equality-in-javascript.html

を、この情報を使用して、あなたが期待される答えを得るので、あなたの設定を変更することができます。

const A = [ {hello: "world"}, {hi: "everyone"} ]; 
const B = A[0]; 
console.log(A.includes(B)); // returns true 
2

これは私にとってうまくいきますが、厳密に同等の作業が含まれているという事実に悩まされているかもしれません。他のオブジェクトが実際に同じオブジェクトでない限り、オブジェクトは同じプロパティを持つ別のオブジェクトと等しいとはみなされません。次の例を参照してください:

const b = {} //some object 
const A = [b, 2] 
console.log(A.includes(b)) //true 
console.log([{}, 2].includes(b)) //false because {} !== b 
関連する問題