ist Ich habe 2 Objekt-Arrays (allUsers
und friendsOnTrip
). Beide Arrays haben das gleiche Format. Jedes Objekt in ihnen enthält Details eines Benutzers (d. H. firstName
und lastName
). Ich versuche es so zu machen, dass wenn ein Objekt in einem Array nicht in dem anderen ist, dann schiebe dieses Objekt auf ein neues Array, sonst nicht.Objekt nicht innerhalb des Arrays gefunden, obwohl es
allUsers.forEach((user) => {
if (friendsOnTrip.indexOf(user) <= -1) {
this._friendsNotOnTrip.push(user);
}
});
Das Problem ist, dass selbst wenn das Objekt user
scheint, wie es in friendsOnTrip
ist, dann ist der Ausdruck:
if (friendsOnTrip.indexOf(user) <= -1)
... wertet noch true
(was falsch ist) also ich am Ende mit this._friendsNotOnTrip
Objekte, die nicht da sein sollte.
Ein Beispiel für eines der Objekte:
{
email: "[email protected]",
firstName: "foo",
lastName: "bar",
key: "123456789",
friends: [
"987654321",
"246808642"
],
location: {
lng: -1.24567,
lat: 50.9865
},
usersToSeeLocation: [
"987654321"
]
}
das Objekt an der Position 0 in allUsers
und das Objekt an der Position 0 in friendsOnTrip
sind das gleiche Objekt. Getestet habe ich die einzelne Attribute und bekam folgende Ergebnisse:
console.log(allUsers[0].firstName === friendsOnTrip[0].firstName); //true
console.log(allUsers[0].lastName === friendsOnTrip[0].lastName); //true
console.log(allUsers[0].email === friendsOnTrip[0].email); //true
console.log(allUsers[0].friends === friendsOnTrip[0].friends); //false
console.log(allUsers[0].key === friendsOnTrip[0].key); //true
console.log(allUsers[0].location === friendsOnTrip[0].location); //false
console.log(allUsers[0].usersToSeeLocation === friendsOnTrip[0].usersToSeeLocation); //false
console.log(allUsers[0] === friendsOnTrip[0]); //false
innen friends
Sehen, usersToSeeLocation
und location
sowohl allUsers[0]
und friendsOnTrip[0]
, die Inhalte sind exakt die gleiche, so ich bin nicht sicher, warum diese Ausdrücke auswerten zu false
.
zu tun, Sie‘ nicht das gleiche Objekt. Sie enthalten die gleichen Informationen, aber sie sind immer noch ein Objekt mit unterschiedlichem Speicherplatz im Speicher. –
Mögliches Duplikat von [Object comparison in JavaScript] (http://stackoverflow.com/questions/1068834/object-comparison-in-javascript) – sabithpocker
Haben beide "Objekte" gleiche Schlüssel und Werte? Wenn ja, können Sie mit ** JSON.stringify ** beide Objekte versuchen und dann vergleichen. Wenn beide "Objekte" denselben Schlüssel haben, aber unterschiedliche Werte haben, muss es "return" false sein. –