gpt4 book ai didi

Javascript通过对象的属性过滤对象数组

转载 作者:行者123 更新时间:2023-11-28 12:57:28 27 4
gpt4 key购买 nike

我有一个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 },
};

如何从userList返回vipsvips.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)
)

最佳答案

您可以使用reduce并获取userList中的用户,这些用户也在vips

const input = {
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 },
]
};

console.log(input.userList.reduce((acc, val) => {
if(!!input.vips.find(vip => vip.username === val.name)) {
acc.push(val);
}
return acc;
}, []));

考虑到vips的长度应该小于userList的长度,或者最大相同(vips应该是一个子集userList),也许更好的方法是映射 VIP 并返回相应的用户,如下所示:

const input = {
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 },
]
};

console.log(input.vips.map(vip => input.userList.find(user => user.name === vip.username)));

关于Javascript通过对象的属性过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54012652/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com