Home > Enterprise >  JavaScript: remove duplicates from last in array of objects
JavaScript: remove duplicates from last in array of objects

Time:03-02

I'm trying to eliminate the similar array of objects with the referent of name key in object with this function getUniqueListBy but it's giving the output by deleting the first duplicated elements in the array

I want to delete the duplicated from last by reference with the name

Sample input:

[
  { name:'shanu', id:1 },
  { name:'bhanu', id:2 },
  { name:'chary', id:3 },
  { name:'shanu', id:4 },
  { name:'rahul', id:5 }
]

Expected Output:

[
  { name:'shanu', id:1 },
  { name:'bhanu', id:2 },
  { name:'chary', id:3 },
  { name:'rahul', id:5      
]

What I did:

function getUniqueListBy(data, key) {
  return [
    ...new Map(data.map((item) => [item[key], item])).values(),
  ];
}

const data = [ { name:'shanu', id:1 }, { name:'bhanu', id:2 }, { name:'chary', id:3 }, { name:'shanu', id:4 }, { name:'rahul', id:5 } ];     
const arr1 = getUniqueListBy(data, "name");
console.log(arr1);

Current Output:

[
  { name:'bhanu', id:2 },
  { name:'chary', id:3 },  
  { name:'shanu', id:4 },
  { name:'rahul', id:5 }    
]

it's deleted the first item but I want to delete similar data from last.

CodePudding user response:

The Map is overwriting the following values of the same key.

You can use a Set to store the added keys and return the final array using Array#reduce:

const getUniqueListBy = (data = [], key) => {
  const set = new Set();
  return data.reduce((arr, e) => {
    if(!set.has(e[key])) {
      set.add(e[key]);
      arr.push({...e}); 
    }
    return arr;
  }, []);
}

const data = [ { name:'shanu', id:1 }, { name:'bhanu', id:2 }, { name:'chary', id:3 }, { name:'shanu', id:4 }, { name:'rahul', id:5 } ];    
const arr = getUniqueListBy(data, "name");
console.log(arr);

CodePudding user response:

const data =[
{
name:'shanu',
id:1
},
{
name:'bhanu',
id:2
},
{
name:'chary',
id:3
},

{
name:'shanu',
id:4
},
{
name:'rahul',
id:5
},
]

function getUniqueListBy(data, key) {
  return [
  ...new Map(data.reverse().map((item) => [item[key], item])).values(),
  ].reverse();
}

const arr1 = getUniqueListBy(data, "name");

console.log(arr1)

  • Related