-1

i have array of objects like this , i want to remove duplicated item according 2 key, in my data, i want to delete items which have same room_id and mdate, in below code object 4 and 5 have same room_id and mdate so i should delete one of them, any solution?

i have this function to remove duplicate object but it can check for one key

function getUnique(arr, comp) {

    arr.map()
    const unique = arr
        .map(e => e[comp])

        // store the keys of the unique objects
        .map((e, i, final) => final.indexOf(e) === i && i)

        // eliminate the dead keys & store unique objects
        .filter(e => arr[e])
        .map(e => arr[e]);

    return unique;
}



arr = [{
cond: 2
extra_fee: 20000
kind: ""
mdate: "2019-12-15"
price: "100000"
room_id: 1
},
{
cond: 2
extra_fee: 20000
kind: ""
mdate: "2019-12-10"
price: "100000"
room_id: 1
},
{
cond: 2
extra_fee: 20000
kind: ""                       object 3 <--------------   is same - have same mdate and room_id
mdate: "2019-12-10"
price: "100000"
room_id: 2
},
{
cond: 2
extra_fee: 20000
kind: ""
mdate: "2019-12-10"
price: "100000"
room_id: 2                       object 4 <--------------   are same - have same mdate and room_id
},
{
cond: 2
extra_fee: 20000
kind: ""
mdate: "2019-12-10"
price: "100000"
room_id: 7
}
]
devmrh
  • 1,171
  • 4
  • 19
  • 46

2 Answers2

1

This will remove the duplicates,

  let arr = [{
    cond: 2,
    extra_fee: 20000,
    kind: "",
    mdate: "2019-12-15",
    price: "100000",
    room_id: 1
  },
  {
    cond: 2,
    extra_fee: 20000,
    kind: "",
    mdate: "2019-12-10",
    price: "100000",
    room_id: 1
  },
  {
    cond: 2,
    extra_fee: 20000,
    kind: "",
    mdate: "2019-12-10",
    price: "100000",
    room_id: 2
  },
  {
    cond: 2,
    extra_fee: 20000,
    kind: "",
    mdate: "2019-12-10",
    price: "100000",
    room_id: 2
  },
  {
    cond: 2,
    extra_fee: 20000,
    kind: "",
    mdate: "2019-12-10",
    price: "100000",
    room_id: 7
  }
  ]
  
const arrayWithoutDuplicates = arr.filter((v,i,a)=>a.findIndex(t=>(t.room_id=== v.room_id && t.mdate===v.mdate))===i)
console.log(arrayWithoutDuplicates)
Vaibhav Singh
  • 932
  • 7
  • 20
0

Try this:

function getUnique(arr, comp) {
    let tmpObj = {};
    let unique = [];
    for (let i = 0; i < arr.length; i++) {
      if (tmpObj[arr[i][comp]] === undefined) {
        tmpObj[arr[i][comp]] = arr[i][comp];
        unique.push(arr[i]);
      }
    }
    return unique;
  }

  let arr = [{
    cond: 2,
    extra_fee: 20000,
    kind: "",
    mdate: "2019-12-15",
    price: "100000",
    room_id: 1
  },
  {
    cond: 2,
    extra_fee: 20000,
    kind: "",
    mdate: "2019-12-10",
    price: "100000",
    room_id: 1
  },
  {
    cond: 2,
    extra_fee: 20000,
    kind: "",
    mdate: "2019-12-10",
    price: "100000",
    room_id: 2
  },
  {
    cond: 2,
    extra_fee: 20000,
    kind: "",
    mdate: "2019-12-10",
    price: "100000",
    room_id: 2
  },
  {
    cond: 2,
    extra_fee: 20000,
    kind: "",
    mdate: "2019-12-10",
    price: "100000",
    room_id: 7
  }
  ]
  console.log(getUnique(arr, "room_id"));
Saurabh Agrawal
  • 7,581
  • 2
  • 27
  • 51
  • it removes all element with same room_id i want to delete only one element if they are same in `mdate` and `room_id` – devmrh Dec 10 '19 at 07:18