首页 > 解决方案 > Javascript通过对象的属性过滤对象数组

问题描述

我有一个userList包含用户基本信息的数组。

this.state = {
    userList: [
        { name:"Ann", number:123456789 },
        { name:"Cathy", number:123456789 },
        { name:"Peter", number:123456789 },
        { name:"Ben", number:123456789 },
    ],
    vips: [ 
        { username:"Ann", years:2018 },
        { username:"Peter", years:2019 },
};

我怎样才能返回vipsfrom userListvips.username等于userList.name

vips_return: [
        { name:"Ann", number:123456789 },
        { name:"Peter", number:123456789 },
]

我尝试使用 .filter 和 .includes 但我不确定如何处理对象。

const vips_return = userList.filter((user)=>
    vips.includes(user.name)
)

标签: javascriptarraysreactjsfilter

解决方案


您可以使用findfindIndex

userList.filter(user => vips.find(vip => vip.username === user.name));

findundefined如果在数组中找不到该值,则返回,因此将其过滤掉。

如果您经常这样做和/或拥有大量数据集,则应首先构建一组名称:

const vipNames = new Set(vips.map(vip => vip.username));

userList.filter(user => vipNames.has(user.name));

推荐阅读