Javascript 如何检查数组中某个对象的属性是否与另一个对象数组中的某个值匹配

Javascript 如何检查数组中某个对象的属性是否与另一个对象数组中的某个值匹配,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我知道头球太复杂了,但现在就是这样。让我更清楚地告诉你 有一个像这样的物体 const users= [ { id:"1", name:"John", mail:"aaa@gmail.com", }, { id:"2", name:"Joe", mail:"bbb@gmail.com", }, ] 还有 const attendingUsers = [ { id:"

我知道头球太复杂了,但现在就是这样。让我更清楚地告诉你

有一个像这样的物体

const users= [
{
id:"1",
name:"John",
mail:"aaa@gmail.com",
},
{
id:"2",
name:"Joe",
mail:"bbb@gmail.com",
},
]
还有

const attendingUsers = [
{
id:"1",
name:"John",
mail:"aaa@gmail.com",
.....
},
{
id:"2",
name:"Joe",
mail:"bbb@gmail.com",
.....
},}
] 
这两个数组都有不同的属性,我只想得到那些对我来说很重要的属性。我需要的是查看
用户
数组,找到与
AttentingUsers
中ID相同的用户


我提出了
users.filter(user=>user.id==attendingUsers.map(attendingUser=>attendingUser.id))首先,你必须确定ID类型是否正确。用户具有ID的数字类型,但AttentingUsers具有字符串类型

假设它们对于下面的代码都是相同的类型(我使用字符串)

您可以使用以下命令将AttentingUsers数组转换为字符串数组:

const attendingUsersIds = attendingUsers.map(attendingUser => attendingUser.id)
然后将ID与以下内容匹配:

const matchedUsers = users.filter(user => attendingUsersIds.includes(user.id))

如果它们不是同一类型,可以使用
user.id.toString()
将数字转换为字符串,或使用
parseInt(attentinguser.id)
将字符串转换为数字。

首先,您必须确保id类型正确。用户具有ID的数字类型,但AttentingUsers具有字符串类型

假设它们对于下面的代码都是相同的类型(我使用字符串)

您可以使用以下命令将AttentingUsers数组转换为字符串数组:

const attendingUsersIds = attendingUsers.map(attendingUser => attendingUser.id)
然后将ID与以下内容匹配:

const matchedUsers = users.filter(user => attendingUsersIds.includes(user.id))

如果它们的类型不同,可以使用
user.id.toString()
将数字转换为字符串,或者使用
parseInt(attentinguser.id)
将字符串转换为数字。

我们可以使用Array.map创建一个新的用户数组,并向每个用户添加属性IsAttenting

我们通过使用搜索任何具有相同id的匹配与会者来确定他们是否出席

const用户=[
{
id:1,
姓名:“约翰”,
邮件:“aaa@gmail.com",
},
{
id:2,
姓名:“乔”,
邮件:“bbb@gmail.com",
},
{       
id:3,
姓名:“爱丽丝”,
邮件:“ccc@gmail.com",
}
]
const AttentingUsers=[
{
id:“1”,
姓名:“约翰”,
邮件:“aaa@gmail.com",
},
{
id:“2”,
姓名:“乔”,
邮件:“bbb@gmail.com",
}
] 
const result=users.map(user=>{
返回{…user,isAttenting:AttentingUsers.some({id}=>id==user.id)};
});

日志(“用户(具有参与属性):”,结果)我们可以使用Array.map创建一个新的用户数组,并向每个用户添加一个属性isAttending

我们通过使用搜索任何具有相同id的匹配与会者来确定他们是否出席

const用户=[
{
id:1,
姓名:“约翰”,
邮件:“aaa@gmail.com",
},
{
id:2,
姓名:“乔”,
邮件:“bbb@gmail.com",
},
{       
id:3,
姓名:“爱丽丝”,
邮件:“ccc@gmail.com",
}
]
const AttentingUsers=[
{
id:“1”,
姓名:“约翰”,
邮件:“aaa@gmail.com",
},
{
id:“2”,
姓名:“乔”,
邮件:“bbb@gmail.com",
}
] 
const result=users.map(user=>{
返回{…user,isAttenting:AttentingUsers.some({id}=>id==user.id)};
});

日志(“用户(具有参与属性):”,结果)
user.id
是一个数字,
attendingUsers.map(attendingUser=>attendingUser.id)
是一个字符串数组,它们不会相等(除非数组只有一个值,并且由于JS字符串化数组的方式和非严格的比较,
=
)而等于id的字符串)。您可能想知道
user.id
是否在该数组中,而不是等于它。
user.id
是一个数字,
AttentingUsers.map(AttentingUser=>AttentingUser.id)
是一个字符串数组,它们不会相等(除非数组只有一个值,且该值等于ID的字符串,因为JS字符串化数组的方式和非严格比较
==
)。您可能想知道user.id是否在该数组中,而不是与之相等。我想问题不在于id,因为我将其与
==
进行比较,而在于逻辑。您的解决方案已经解决了我的问题。非常感谢您为解释它所做的努力!
=
如果您不确定类型,只想按值比较,但这不是使用它的情况。您的解决方案的问题已解释为。我很高兴能帮助您,兄弟。有一个好的解决方案!我想问题不在于ids,因为我将其与
==
进行比较,但更多的是关于逻辑。您的解决方案已经解决了我的问题。非常感谢您的努力解释它!
>=
如果您不确定类型,只想通过值进行比较就可以了,但这不是使用它的情况。您的解决方案的问题已由解释。我很高兴能帮助您,兄弟。祝您过得愉快!非常感谢Terry的努力!这让我从另一个角度看待问题。很好,很高兴成为assista的一员nce!非常感谢Terry的努力!这让我从另一个角度看待这个问题。太好了,很高兴能提供帮助!