2016-09-24 4 views
0

私はオブジェクトの配列を持っていて、その配列内の特定のオブジェクトを見つけるためにindexOfを使います。オブジェクトの配列内のオブジェクトを検索する場合nullを返す

私はオンラインデータストアに切り替えました。選択したオブジェクトのデータが変数として返されるようになったため、配列内で一致する選択オブジェクトを検索するために使用される「ダミー」オブジェクトを作成する必要があります。

ダミーオブジェクトと配列内のオブジェクトを比較していますが、それらは同じに見えますが、常にnullが返されます。

これは、オブジェクトの配列です:

data: 
[ 
    Creative { 
     id: '5631943370604544', 
     gid: '5631943370604544', 
     name: 'Hello', 
     description: '', 
     url: '', 
     videos: [] 
    }, 
    Creative { 
     id: '5653294995210240', 
     gid: '5653294995210240', 
     name: 'Yo', 
     description: '', 
     url: '', 
     videos: [] 
    }, 
    Creative { 
     id: '5745189578604544', 
     gid: '5745189578604544', 
     name: 'Sup', 
     description: '', 
     url: '', 
     videos: [] 
    } 
] 

は、これはダミーのオブジェクトである:ここでは

object: 

Creative { 
    id: '5653294995210240', 
    gid: '5653294995210240', 
    name: 'Yo', 
    description: '', 
    url: '', 
    videos: [] 
} 

は、ルックアップのために使用されている機能です。これはGraphQLとRelayの一部であり、使用される関数であるため変更不可能です。

function cursorForObjectInConnection(data, object) { 
    var offset = data.indexOf(object); 
    if (offset === -1) { 
    return null; 
    } 
    return offsetToCursor(offset); 
} 
+2

'{name:" bob "} === {name:" bob "} // false'のために動作しません – vlaz

答えて

0

あなたは自分の検索機能(IDで検索)を行い、IDでオブジェクトを検索しません。

1

indexOf()は、厳密な等価性(===またはtriple-equals演算子で使用されるのと同じ方法)を使用して、配列の要素とsearchElementを比較します。

から:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

これはJavaScriptで知ることは非常に重要なルールです。ダミーオブジェクト(同じに見えても)は、その配列内のオブジェクトと同じではありません。それらはコンピュータのメモリ内の2つの別々の場所に存在するため、indexOfで使用される厳密な等価比較は、と等しくないとみなします。

これは、文字列、数値、ブール値のようなプリミティブデータ型では当てはまりません。

関連する問題