2

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.

2
  • You are not actually deleting here, you are overwriting. So you could reverse your array first, then do the mapping as you currently do, and then reverse the result again ... Commented Mar 2, 2022 at 11:32
  • Please accept an answer as the solution if the problem is solved to close the question. Commented Mar 5, 2022 at 13:39

2 Answers 2

4

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);

Sign up to request clarification or add additional context in comments.

Comments

0

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)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.