-2

Input:

const data=[
      { id: 123, name: "dave", age: 23 , address:city:"chennai"},
      { id: 456, name: "chris", age: 23, address:city:"delhi"},
      { id: 789, name: "bob", age: 23, address:city:""},
      { id: 789, name: "bob", age: 23, address:city:"mumbai"},
      { id: 555, name: "dave", age: 23 , address:city:"banglore"}
      { id: 101, name: "tom", age: 23, address:city:"jaipur" },
      { id: 101, name: "tom", age: 23, address:city:" " },
      { id: 102, name: "tim", age: 23, address:city:"kolkata"}
    ]

Based on the ID value I need to remove the duplicate object and override the address key value

Excepted output:

const data=[
      { id: 123, name: "dave", age: 23 , address:city:"chennai"},
      { id: 456, name: "chris", age: 23, address:city:"delhi"},
      { id: 789, name: "bob", age: 23, address:city:"mumbai"},
      { id: 555, name: "dave", age: 23 , address:city:"banglore"}
      { id: 101, name: "tom", age: 23, address:city:"jaipur" },
      { id: 102, name: "tim", age: 23, address:city:"kolkata"}
    ]
  • 2
    You don't want to remove the duplicate but wanna merge also. But there are some errors also like `address:city:"chennai"` This is not a valid syntax. – DecPK Sep 06 '21 at 07:18

1 Answers1

-1

I would do this by converting it to a dictionary and then back to an array.

const data = [{
    id: 123,
    name: "dave",
    age: 23,
    "address:city": "chennai"
  },
  {
    id: 456,
    name: "chris",
    age: 23,
    "address:city": "delhi"
  },
  {
    id: 789,
    name: "bob",
    age: 23,
    "address:city": ""
  },
  {
    id: 789,
    name: "bob",
    age: 23,
    "address:city": "mumbai"
  },
  {
    id: 555,
    name: "dave",
    age: 23,
    "address:city": "banglore"
  }, {
    id: 101,
    name: "tom",
    age: 23,
    "address:city": "jaipur"
  },
  {
    id: 101,
    name: "tom",
    age: 23,
    "address:city": " "
  },
  {
    id: 102,
    name: "tim",
    age: 23,
    "address:city": "kolkata"
  }
];
const dataObj = {};
data.forEach(d => {
  if (!dataObj[d.id] || d['address:city'].length > dataObj[d.id]['address:city'].length) {
    dataObj[d.id] = d;
  }
});
const dataWithoutDuplicates = Object.values(dataObj);
console.log(dataWithoutDuplicates);
Dom
  • 147
  • 1
  • 6