繁体   English   中英

即使在数组中也找不到对象

[英]Object not found within array even though it is

我有2个对象数组( allUsersfriendsOnTrip )。 这两个数组的格式相同。 其中的每个对象都包含用户的详细信息(即firstNamelastName )。 我试图使一个数组中的一个对象不在另一个数组中,然后将该对象推到一个新的数组中,否则不要这样做。

allUsers.forEach((user) => {
    if (friendsOnTrip.indexOf(user) <= -1) {
        this._friendsNotOnTrip.push(user);
    }
});

问题是,即使对象user 看起来像在friendsOnTrip ,也可以使用friendsOnTrip表达式:

if (friendsOnTrip.indexOf(user) <= -1)

...仍将评估为true (这是错误的),因此我最终在this._friendsNotOnTrip了不应存在的对象。

对象之一的示例:

{
    email: "foo@bar.com",
    firstName: "foo",
    lastName: "bar",
    key: "123456789",
    friends: [
        "987654321",
        "246808642"
    ],
    location: {
        lng: -1.24567,
        lat: 50.9865
    },
    usersToSeeLocation: [
        "987654321"
    ]
}

allUsers位于位置0的对象和friendsOnTrip中位于位置0的对象是同一对象。 我测试了各个属性,并得到以下结果:

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

allUsers[0]friendsOnTrip[0] friendsusersToSeeLocationlocation中,内容完全相同,因此我不确定为什么这些表达式求值为false

您无法比较这样的对象。 例如

[{a: 1, b:2}].indexOf({a: 1, b:2})

返回-1。 相反,您应该搜索特定的属性,例如

allUsers.forEach((user) => {
    if (friendsOnTrip.map(u => u.key).indexOf(user.key) <= -1) {
        this._friendsNotOnTrip.push(user);
    }
});

“查看朋友,usersToSeeLocation和allUsers [0]和friendsOnTrip [0]中的位置,它们的内容是完全相同的,因此我不确定这些表达式为何被评估为false。”

那是因为它们不一样。 具有相同的值,但它们不是同一对象! 这就是为什么您的“ ===”返回false您必须一一比较所有索引

您可以执行array1.join()=== array2.join()以更快地进行比较

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM