2016-09-24 3 views
0

Ich habe ein Array von Objekten und verwenden Sie indexOf, um ein bestimmtes Objekt in diesem Array zu finden.Suche nach einem Objekt im Array von Objekten gibt null

Ich habe zu einem Online-Datenspeicher gewechselt, und da die Daten für ein ausgewähltes Objekt jetzt als Variablen zurückgegeben werden, muss ein "Dummy" -Objekt erstellt werden, das dann zum Suchen des passenden ausgewählten Objekts im Array verwendet wird.

Ich habe das Dummy-Objekt und das Objekt im Array verglichen und sie sehen identisch aus, aber Null wird immer zurückgegeben.

Dies ist das Array von Objekten:

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: [] 
    } 
] 

Dies ist das Dummy-Objekt:

object: 

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

Hier ist die Funktion, die für den Look verwendet wird. Dies ist nicht änderbar, da es Teil von GraphQL und Relay ist und die Funktion verwendet wird.

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

Funktioniert nicht, weil '{name:" bob "} === {name:" bob "} // false" – vlaz

Antwort

0

, warum Sie für das Objekt von ID ?? keine eigene Suchfunktion (Suche nach ID) machen und suchen !!

1

indexOf() vergleicht search zu den Elementen der Array strenge Gleichheit verwendet (die gleiche Methode verwendet durch die === oder triple-Gleichheitsoperator).

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

Dies ist eine sehr wichtige Regel in Javascript kennen. Ihr Dummy-Objekt (obwohl es identisch aussieht) ist nicht das gleiche wie das Objekt in diesem Array. Sie existieren an zwei verschiedenen Stellen im Speicher Ihres Computers, so dass der von indexOf verwendete strenge Gleichheitsvergleich sie als ungleich ansieht.

Dies ist für primitive Datentypen wie Zeichenfolgen, Zahlen oder boolesche Werte nicht der Fall.

Verwandte Themen