Home > Software design >  How to remove duplicate id from array of object by status?
How to remove duplicate id from array of object by status?

Time:06-18

Hello all I am trying to remove duplicate id from array by status but I am not getting it below is my array and code which I try.

[
    {
        "id": "1",
        "room_no": "Room No 101",
        "status": "confirm",
        "created_at": "2021-10-27 17:41:05",
        "bid": "70",
        "rid": "1",
        "guest_name": "test",
        "tariff": "2000",
        "apaid": "2000",
        "ckdate": "2022-06-17",
        "bstatus": "confirm"        
    },
    {
        "id": "1",
        "room_no": "Room No 101",
        "status": "confirm",
        "created_at": "2021-10-27 17:41:05",
        "bid": "72",
        "rid": "1",
        "guest_name": "sad",
        "tariff": "2222",
        "apaid": "2222",
        "ckdate": "2022-07-29",
        "bstatus": "reserve"        
    },
    {
        "id": "1",
        "room_no": "Room No 101",
        "status": "confirm",
        "created_at": "2021-10-27 17:41:05",
        "bid": "73",
        "rid": "1",
        "guest_name": "abid",
        "tariff": "2500",
        "apaid": "2500",
        "ckdate": "2022-06-15",
        "bstatus": "checkout"        
    },
    {
        "id": "2",
        "room_no": "Room No 102",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:05",
        "bid": null,
        "rid": "2",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "3",
        "room_no": "Room No 103",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:05",
        "bid": null,
        "rid": "3",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "4",
        "room_no": "Room No 104",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:05",
        "bid": null,
        "rid": "4",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "5",
        "room_no": "Room No 105",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:05",
        "bid": null,
        "rid": "5",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "6",
        "room_no": "Room No 106",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "6",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "7",
        "room_no": "Room No 201",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "7",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "8",
        "room_no": "Room No 202",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "8",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "9",
        "room_no": "Room No 203",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "9",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "10",
        "room_no": "Room No 204",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "10",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "11",
        "room_no": "Room No 205",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "11",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "12",
        "room_no": "Room No 206",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "12",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    }
]

I want to be remove duplicate id:1
but I want id:1 which has bstatus:"confirm"
if bstatus:"checkout" is present in object
and id only bstatus:"checkout" is present
than it will fetch bstatus:"checkout" only

expected result

[
    {
        "id": "1",
        "room_no": "Room No 101",
        "status": "confirm",
        "created_at": "2021-10-27 17:41:05",
        "bid": "70",
        "rid": "1",
        "guest_name": "test",
        "tariff": "2000",
        "apaid": "2000",
        "ckdate": "2022-06-17",
        "bstatus": "confirm"        
    },
    {
        "id": "2",
        "room_no": "Room No 102",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:05",
        "bid": null,
        "rid": "2",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "3",
        "room_no": "Room No 103",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:05",
        "bid": null,
        "rid": "3",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "4",
        "room_no": "Room No 104",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:05",
        "bid": null,
        "rid": "4",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "5",
        "room_no": "Room No 105",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:05",
        "bid": null,
        "rid": "5",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "6",
        "room_no": "Room No 106",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "6",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "7",
        "room_no": "Room No 201",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "7",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "8",
        "room_no": "Room No 202",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "8",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "9",
        "room_no": "Room No 203",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "9",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "10",
        "room_no": "Room No 204",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "10",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "11",
        "room_no": "Room No 205",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "11",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "12",
        "room_no": "Room No 206",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "12",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    }
]

My Code

for (var i = res.data.length - 1; i >= 0; i--) {
    if (index.indexOf(res.data[i].id) === -1) {
          if(res.data[i].bstatus !== 'reserve' && res.data[i].status !== 'cancel') {
            index.push(res.data[i].id);
            result.unshift(res.data[i]);
          }
    }
  }

any help would be appreciated thank you.

CodePudding user response:

You could group and check if the wanted bstatus is 'confirm'.

const
    data = [{ id: "1", room_no: "Room No 101", status: "confirm", created_at: "2021-10-27 17:41:05", bid: "70", rid: "1", guest_name: "test", tariff: "2000", apaid: "2000", ckdate: "2022-06-17", bstatus: "confirm" }, { id: "1", room_no: "Room No 101", status: "confirm", created_at: "2021-10-27 17:41:05", bid: "72", rid: "1", guest_name: "sad", tariff: "2222", apaid: "2222", ckdate: "2022-07-29", bstatus: "reserve" }, { id: "1", room_no: "Room No 101", status: "confirm", created_at: "2021-10-27 17:41:05", bid: "73", rid: "1", guest_name: "abid", tariff: "2500", apaid: "2500", ckdate: "2022-06-15", bstatus: "checkout" }, { id: "2", room_no: "Room No 102", status: "checkout", created_at: "2021-10-27 17:41:05", bid: null, rid: "2", guest_name: null, tariff: null, apaid: null, ckdate: null, bstatus: null }, { id: "3", room_no: "Room No 103", status: "checkout", created_at: "2021-10-27 17:41:05", bid: null, rid: "3", guest_name: null, tariff: null, apaid: null, ckdate: null, bstatus: null }, { id: "4", room_no: "Room No 104", status: "checkout", created_at: "2021-10-27 17:41:05", bid: null, rid: "4", guest_name: null, tariff: null, apaid: null, ckdate: null, bstatus: null }, { id: "5", room_no: "Room No 105", status: "checkout", created_at: "2021-10-27 17:41:05", bid: null, rid: "5", guest_name: null, tariff: null, apaid: null, ckdate: null, bstatus: null }, { id: "6", room_no: "Room No 106", status: "checkout", created_at: "2021-10-27 17:41:06", bid: null, rid: "6", guest_name: null, tariff: null, apaid: null, ckdate: null, bstatus: null }, { id: "7", room_no: "Room No 201", status: "checkout", created_at: "2021-10-27 17:41:06", bid: null, rid: "7", guest_name: null, tariff: null, apaid: null, ckdate: null, bstatus: null }, { id: "8", room_no: "Room No 202", status: "checkout", created_at: "2021-10-27 17:41:06", bid: null, rid: "8", guest_name: null, tariff: null, apaid: null, ckdate: null, bstatus: null }, { id: "9", room_no: "Room No 203", status: "checkout", created_at: "2021-10-27 17:41:06", bid: null, rid: "9", guest_name: null, tariff: null, apaid: null, ckdate: null, bstatus: null }, { id: "10", room_no: "Room No 204", status: "checkout", created_at: "2021-10-27 17:41:06", bid: null, rid: "10", guest_name: null, tariff: null, apaid: null, ckdate: null, bstatus: null }, { id: "11", room_no: "Room No 205", status: "checkout", created_at: "2021-10-27 17:41:06", bid: null, rid: "11", guest_name: null, tariff: null, apaid: null, ckdate: null, bstatus: null }, { id: "12", room_no: "Room No 206", status: "checkout", created_at: "2021-10-27 17:41:06", bid: null, rid: "12", guest_name: null, tariff: null, apaid: null, ckdate: null, bstatus: null }],
    result = Object.values(data.reduce((r, o) => {
        if (!r[o.id] || o.bstatus === 'confirm') r[o.id] = o;
        return r;
    }, {}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

CodePudding user response:

Here you go.

Your data would probably be better held as an associate array. That's what I've used to convert it into the format you want (interim). I then use interim value to convert to result.

If this doesn't solve your problem then let me know. I'm not sure I fully got the logic you were after.

var data = [
    {
        "id": "1",
        "room_no": "Room No 101",
        "status": "confirm",
        "created_at": "2021-10-27 17:41:05",
        "bid": "70",
        "rid": "1",
        "guest_name": "test",
        "tariff": "2000",
        "apaid": "2000",
        "ckdate": "2022-06-17",
        "bstatus": "confirm"        
    },
    {
        "id": "1",
        "room_no": "Room No 101",
        "status": "confirm",
        "created_at": "2021-10-27 17:41:05",
        "bid": "72",
        "rid": "1",
        "guest_name": "sad",
        "tariff": "2222",
        "apaid": "2222",
        "ckdate": "2022-07-29",
        "bstatus": "reserve"        
    },
    {
        "id": "1",
        "room_no": "Room No 101",
        "status": "confirm",
        "created_at": "2021-10-27 17:41:05",
        "bid": "73",
        "rid": "1",
        "guest_name": "abid",
        "tariff": "2500",
        "apaid": "2500",
        "ckdate": "2022-06-15",
        "bstatus": "checkout"        
    },
    {
        "id": "2",
        "room_no": "Room No 102",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:05",
        "bid": null,
        "rid": "2",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "3",
        "room_no": "Room No 103",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:05",
        "bid": null,
        "rid": "3",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "4",
        "room_no": "Room No 104",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:05",
        "bid": null,
        "rid": "4",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "5",
        "room_no": "Room No 105",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:05",
        "bid": null,
        "rid": "5",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "6",
        "room_no": "Room No 106",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "6",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "7",
        "room_no": "Room No 201",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "7",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "8",
        "room_no": "Room No 202",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "8",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "9",
        "room_no": "Room No 203",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "9",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "10",
        "room_no": "Room No 204",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "10",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "11",
        "room_no": "Room No 205",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "11",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    },
    {
        "id": "12",
        "room_no": "Room No 206",
        "status": "checkout",
        "created_at": "2021-10-27 17:41:06",
        "bid": null,
        "rid": "12",
        "guest_name": null,
        "tariff": null,
        "apaid": null,
        "ckdate": null,
        "bstatus": null        
    }
]

// Store values in interim using associate array.
var interim = {};
for(let item of data)
{
  if(interim[item.id] === undefined) // Doesn't already exist. Add to interim
    interim[item.id] = item;
  else
  {
    if(item.bstatus === "confirm") // Let's overwrite current entry with "confirm"
      interim[item.id] = item;
  }
}

// We now have unique values. Let's convert back to array.
let result = [];
for(let prop in interim)
{
  result.push(interim[prop] );
}

console.log(result);

CodePudding user response:

A filter can be done with flatMap(). Criteria is:

  • bstatus is "confirm" OR null return object

  • otherwise return nothing.

obj.bstatus === "confirm" || obj.bstatus === null ? [obj] : []

let data=[{id:"1",room_no:"Room No 101",status:"confirm",created_at:"2021-10-27 17:41:05",bid:"70",rid:"1",guest_name:"test",tariff:"2000",apaid:"2000",ckdate:"2022-06-17",bstatus:"confirm"},{id:"1",room_no:"Room No 101",status:"confirm",created_at:"2021-10-27 17:41:05",bid:"72",rid:"1",guest_name:"sad",tariff:"2222",apaid:"2222",ckdate:"2022-07-29",bstatus:"reserve"},{id:"1",room_no:"Room No 101",status:"confirm",created_at:"2021-10-27 17:41:05",bid:"73",rid:"1",guest_name:"abid",tariff:"2500",apaid:"2500",ckdate:"2022-06-15",bstatus:"checkout"},{id:"2",room_no:"Room No 102",status:"checkout",created_at:"2021-10-27 17:41:05",bid:null,rid:"2",guest_name:null,tariff:null,apaid:null,ckdate:null,bstatus:null},{id:"3",room_no:"Room No 103",status:"checkout",created_at:"2021-10-27 17:41:05",bid:null,rid:"3",guest_name:null,tariff:null,apaid:null,ckdate:null,bstatus:null},{id:"4",room_no:"Room No 104",status:"checkout",created_at:"2021-10-27 17:41:05",bid:null,rid:"4",guest_name:null,tariff:null,apaid:null,ckdate:null,bstatus:null},{id:"5",room_no:"Room No 105",status:"checkout",created_at:"2021-10-27 17:41:05",bid:null,rid:"5",guest_name:null,tariff:null,apaid:null,ckdate:null,bstatus:null},{id:"6",room_no:"Room No 106",status:"checkout",created_at:"2021-10-27 17:41:06",bid:null,rid:"6",guest_name:null,tariff:null,apaid:null,ckdate:null,bstatus:null},{id:"7",room_no:"Room No 201",status:"checkout",created_at:"2021-10-27 17:41:06",bid:null,rid:"7",guest_name:null,tariff:null,apaid:null,ckdate:null,bstatus:null},{id:"8",room_no:"Room No 202",status:"checkout",created_at:"2021-10-27 17:41:06",bid:null,rid:"8",guest_name:null,tariff:null,apaid:null,ckdate:null,bstatus:null},{id:"9",room_no:"Room No 203",status:"checkout",created_at:"2021-10-27 17:41:06",bid:null,rid:"9",guest_name:null,tariff:null,apaid:null,ckdate:null,bstatus:null},{id:"10",room_no:"Room No 204",status:"checkout",created_at:"2021-10-27 17:41:06",bid:null,rid:"10",guest_name:null,tariff:null,apaid:null,ckdate:null,bstatus:null},{id:"11",room_no:"Room No 205",status:"checkout",created_at:"2021-10-27 17:41:06",bid:null,rid:"11",guest_name:null,tariff:null,apaid:null,ckdate:null,bstatus:null},{id:"12",room_no:"Room No 206",status:"checkout",created_at:"2021-10-27 17:41:06",bid:null,rid:"12",guest_name:null,tariff:null,apaid:null,ckdate:null,bstatus:null}];

let output = data.flatMap(obj => obj.bstatus === "confirm" || obj.bstatus === null ? [obj] : []); 

console.log(output);

  • Related