У меня есть 2 объекта массивов (allUsers
и friendsOnTrip
). Оба этих массива имеют один и тот же формат. Каждый объект внутри них содержит информацию о пользователе (то есть firstName
и lastName
). Я пытаюсь сделать так, что если объект в одном массиве не находится в другом, то нажмите этот объект на новый массив, иначе нет.Объект не найден в пределах массива, хотя он
allUsers.forEach((user) => {
if (friendsOnTrip.indexOf(user) <= -1) {
this._friendsNotOnTrip.push(user);
}
});
Проблема заключается в том, что даже если объект user
кажется, как это в friendsOnTrip
, то выражение:
if (friendsOnTrip.indexOf(user) <= -1)
... все еще будет вычисляться true
(что неправильно), поэтому я получаю объекты в пределах this._friendsNotOnTrip
, которых не должно быть.
Пример одного из объектов:
{
email: "[email protected]",
firstName: "foo",
lastName: "bar",
key: "123456789",
friends: [
"987654321",
"246808642"
],
location: {
lng: -1.24567,
lat: 50.9865
},
usersToSeeLocation: [
"987654321"
]
}
Объекта в позиции 0 в allUsers
и объекте в положении 0 в friendsOnTrip
является же объектом. Я проверил отдельные атрибуты и получил следующие результаты:
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
Заглянув friends
, usersToSeeLocation
и location
в обоих allUsers[0]
и friendsOnTrip[0]
, содержание является точно таким же, так что я не уверен, почему этими выражениями вычисляемых false
.
Они» не один и тот же объект. Они содержат одну и ту же информацию, но они все еще имеют объект с разным пространством в памяти. –
Возможный дубликат [Сравнение объектов в JavaScript] (http://stackoverflow.com/questions/1068834/object-comparison-in-javascript) – sabithpocker
У обоих объектов есть такие же ключи, как и значения? Если это так, вы можете попробовать с ** JSON.stringify ** оба объекта, а затем сравнить. Если оба объекта имеют один и тот же ключ, но имеют разные значения, то он должен быть 'return' false. –