javascript - 如何从列表中过滤数据并从角度数据中删除现有房间
问题描述
data = [{
id: "txv3vvBr8KYB",
name: "room 1"
},{
id: "txv3vvBr8KJB",
name: "room 2"
},{
id: "txv3vvBr8K",
name: "room 4"
},{
id: "txv3vvBr8LKP",
name: "room 3"
},{
id: "txv3vvBr8LDS",
name: "room 5"
}]
roomList = [
{
room: {
code: "r001",
id: "txv3vvBr8KYB",
name: "room 1",
status: "FULL"
}
},
{
room: {
code: "r002",
id: "txv3vvBr8KJB",
name: "room 2",
status: "FULL"
}
},
{
room: {
code: "r003",
id: "txv3vvBr8LKP",
name: "room 3",
status: "FULL"
}
}
]
我在这里要做的是过滤来自 roomList 的数据,并在它们是相同的 id 时从数据中删除该项目。
预期的输出应该是这样的:
data = [{
id: "txv3vvBr8K",
name: "room 4"
}{
id: "txv3vvBr8LDS",
name: "room 5"
}]
我尝试使用过滤器和地图。
this.data.filter((x: any) => this.roomList.map((y: any) => y['room']['id] === x['id']);
解决方案
可能最好先将reduce()
房间 ID 设置为 a Set
,然后filter()
基于此:
const ids = roomList.reduce((a, {room: {id}}) => (a.add(id), a), new Set());
const result = data.filter(({id}) => !ids.has(id));
完整片段:
const data = [{
id: "txv3vvBr8KYB",
name: "room 1"
}, {
id: "txv3vvBr8KJB",
name: "room 2"
}, {
id: "txv3vvBr8K",
name: "room 4"
}, {
id: "txv3vvBr8LKP",
name: "room 3"
}, {
id: "txv3vvBr8LDS",
name: "room 5"
}];
const roomList = [{
room: {
code: "r001",
id: "txv3vvBr8KYB",
name: "room 1",
status: "FULL"
}
},
{
room: {
code: "r002",
id: "txv3vvBr8KJB",
name: "room 2",
status: "FULL"
}
},
{
room: {
code: "r003",
id: "txv3vvBr8LKP",
name: "room 3",
status: "FULL"
}
}
];
const ids = roomList.reduce((a, {room: {id}}) => (a.add(id), a), new Set());
const result = data.filter(({id}) => !ids.has(id));
console.log(result);
或者,如果您真的想在单线中进行并且性能不是什么大问题,您可以使用some()
:
const result = data.filter(({id}) => !roomList.some(({room}) => room.id === id));
完整片段:
const data = [{
id: "txv3vvBr8KYB",
name: "room 1"
}, {
id: "txv3vvBr8KJB",
name: "room 2"
}, {
id: "txv3vvBr8K",
name: "room 4"
}, {
id: "txv3vvBr8LKP",
name: "room 3"
}, {
id: "txv3vvBr8LDS",
name: "room 5"
}];
const roomList = [{
room: {
code: "r001",
id: "txv3vvBr8KYB",
name: "room 1",
status: "FULL"
}
},
{
room: {
code: "r002",
id: "txv3vvBr8KJB",
name: "room 2",
status: "FULL"
}
},
{
room: {
code: "r003",
id: "txv3vvBr8LKP",
name: "room 3",
status: "FULL"
}
}
];
const result = data.filter(({id}) => !roomList.some(({room}) => room.id === id));
console.log(result);
推荐阅读
- iccube - iccube REST API 文档在哪里?
- c# - 无法在 C# 中使用 WebDriverWait 显式等待汉堡菜单
- java - 如何比较Java中日期的时间部分
- primefaces - 如何将依赖于 PF 的下拉列表转换为自动完成?
- javascript - Angular Material sidenav 指令在 app.component 中不起作用
- c# - 创建泛型类以更新多个类的属性
- javascript - 在 Swiper JS 中放大鼠标悬停
- javascript - Highchart - 活动量表显示标签和标签
- python - 如何使用新数据添加更新表
- c# - 采用window 8/10技术的全实时屏幕捕捉,无延迟