如何根据 2 个属性删除数组中的重复对象?

Ste*_*n-v 0 javascript arrays filter ecmascript-6

我有一个房间对象数组,我目前正在根据它们的room_rate_type_id属性从数组中删除重复的对象:

const rooms = [{
    room_rate_type_id: 202,
    price: 200
  },
  {
    room_rate_type_id: 202,
    price: 200
  },
  {
    room_rate_type_id: 202,
    price: 189
  },
  {
    room_rate_type_id: 190,
    price: 200
  }
];

const newRooms = rooms.filter((room, index, array) => {
  const roomRateTypeIds = rooms.map(room => room.room_rate_type_id);
  // Returns the first index found.
  return roomRateTypeIds.indexOf(room.room_rate_type_id) === index;
});

console.log(newRooms);
Run Code Online (Sandbox Code Playgroud)

但是,我还需要确保对象不仅在room_rate_type_id匹配时而且在价格时才会被删除。

我可以理解过滤器功能在我给定的示例中是如何工作的,但我不确定如何干净地检查价格,最好是在 ES6 中。

mar*_*308 6

你可以做

const rooms = [
  {
    room_rate_type_id: 202,
    price: 200
  },
  {
    room_rate_type_id: 202,
    price: 200
  },
  {
    room_rate_type_id: 202,
    price: 189
  },
  {
    room_rate_type_id: 190,
    price: 200
  }
];

let result = rooms.filter((e, i) => {
    return rooms.findIndex((x) => {
    return x.room_rate_type_id == e.room_rate_type_id && x.price == e.price;}) == i;

});

console.log(result);
Run Code Online (Sandbox Code Playgroud)

这将过滤除第一次出现的任何对象之外的所有重复项