2つのオブジェクト配列(allUsers
およびfriendsOnTrip
)があります。これらの配列はどちらも同じフォーマットです。その中の各オブジェクトには、ユーザーの詳細(つまり、firstName
とlastName
)が含まれています。ある配列のオブジェクトが他の配列にない場合は、そのオブジェクトを新しい配列にプッシュします。それ以外の場合は、そうしないようにしています。まだ間違っているtrue
(と評価されます...配列内にオブジェクトが見つかりません
if (friendsOnTrip.indexOf(user) <= -1)
:
allUsers.forEach((user) => {
if (friendsOnTrip.indexOf(user) <= -1) {
this._friendsNotOnTrip.push(user);
}
});
問題は、オブジェクトuser
がだ場合でも、それは、friendsOnTrip
でのその式であるようにということです)だから私はthis._friendsNotOnTrip
の中にあるはずのオブジェクトで終わる。
オブジェクトの一例:friendsOnTrip
でallUsers
で
{
email: "[email protected]",
firstName: "foo",
lastName: "bar",
key: "123456789",
friends: [
"987654321",
"246808642"
],
location: {
lng: -1.24567,
lat: 50.9865
},
usersToSeeLocation: [
"987654321"
]
}
位置0における物体及び位置0におけるオブジェクトは、同じオブジェクトです。私は、個々の属性を調べ、以下の結果得た:
friends
の内側に探し
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
、usersToSeeLocation
、およびallUsers[0]
とfriendsOnTrip[0]
の両方でlocation
を、内容は全く同じですので、私はそれらの式がに評価している理由としてわかりませんよfalse
。
彼らは」あなたのcomparitionを行うために)(array2.join ===です同じオブジェクトではない。彼らは同じ情報を保持していますが、彼らはまだメモリ内の別の空間を持つ異種のオブジェクトです。 –
[JavaScriptでのオブジェクト比較]の可能な複製(0120-17753) – sabithpocker
「オブジェクト」の両方に同じキーと値がありますか?もしそうなら、あなたは** JSON.stringify **の両方のオブジェクトを試してから比較することができます。両方のオブジェクトが同じキーを持っていても値が異なる場合、 'return' falseでなければなりません。 –