2017-05-25 15 views
1

私はarr.includes(アイテム)を使用しようとしています。項目が配列の要素である場合、関数はTrueを返す必要があります。しかし、それは多次元配列でそうすることはできないようです。 (コンソールでノードを実行している)、このスクリーンショットを見てみましょう:Arr.includes(item) - 多次元配列で使用できますか?

enter image description here

私はGoogle Chromeの上で同様の結果を得ました。

EC6の機能であり、まだ完全に機能していないのでしょうか?

Mozille pageに関するこのような問題に関する情報はありません。

+1

いいえ、 'includes()'は同一性ではなく、(ある)等価性で比較します。これをチェックしてください: '[0,1] === [0,1]'これも真実ではありません。 – Thomas

+0

'array.some' +' array.every'の組み合わせを使用する必要があります。 – Rajesh

+0

Array.includes()はInternet Explorerでは動作しません。 –

答えて

5

それはオペランドが同じオブジェクトではなく、同じ内容を持って起こる2(異なる)オブジェクトであることを確認===テストを実行するため、いいえ、あなたは、深い構造にそれを使用することはできません。

リンク先のMDNページには、sameValueZero()ネストされた機能内の===テストが表示されているポリフィルがあります。上記の理由から

、これは実際にはtrueを返します:

let a = [0, 1]; 
let b = [1, 2]; 
let c = [a, b]; 
c.includes(b); 
> true 

.includes本当にに渡されたオブジェクトがcに含まれているのと同じオブジェクトであるためです。

+0

私の理解が正しいなら、それは配列が参照/アドレスであることと関係しており、実際に関数に渡しているのはアドレスです。 – Ben

+0

@Benかなり大丈夫ですが、もちろんJSは実際にあなたにアドレス/参照の可視性を与えていません。 – Alnitak