首页 > 解决方案 > 如何从列表中过滤数据并从角度数据中删除现有房间

问题描述

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']);

标签: javascriptangulartypescript

解决方案


可能最好先将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);


推荐阅读