首页 > 解决方案 > 如何检查数组对象的属性是否与另一个对象数组中的值之一匹配

问题描述

我知道标题太复杂了,但现在就是这样。让我让你更清楚。

有一个像

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",
.....
},}
] 

这两个数组都有不同的属性,我只想得到对我很重要的那些。我需要的是查看users数组并找到与来自的 id 相同的数组attendingUsers

我想出了users.filter(user => user.id == attendingUsers.map(attendingUser => attendingUser.id));但这只是返回空数组。知道解决此类问题的最佳方法是什么吗?

标签: javascriptarraysreactjs

解决方案


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

我们通过使用Array.some搜索具有相同 ID 的任何匹配的与会者来确定他们是否参加。

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

const attendingUsers = [
    {
        id:"1",
        name:"John",
        mail:"aaa@gmail.com",

    },
    {
        id:"2",
        name:"Joe",
        mail:"bbb@gmail.com",
    }
] 

const result = users.map(user => { 
    return { ...user, isAttending: attendingUsers.some(({id}) => id == user.id) };
});
console.log("Users (with attending property):", result);


推荐阅读