Home > OS >  Return array of objects with respect to uniqueness of property: Javascript
Return array of objects with respect to uniqueness of property: Javascript

Time:02-19

I am having array of objects with the following structure

const arr = [
              {id: 0, name: "abc", userid: "0"},
              {id: 1, name: "lmn", userid: "123"},
              {id: 3, name: "pqr", userid:"456"},
              {id: 4, name: "xyz", userid: "123"}
            ]

I want to return the objects where userid should be unique and is not equals to "0".

This is my approach. It returns just everything

   const result = [
        ...new Set(
             arr.map((node) => {
            if (node.userid !== "0") return node;
          })
        )
      ];
      console.log(result);

CodePudding user response:

Instead of using Set, use Map. Both are used to store unique values, the difference between them is Set for arrays with unique values while Map for objects with unique keys.

const arr = [
  {id: 0, name: "abc", userid: "0"},
  {id: 1, name: "lmn", userid: "123"},
  {id: 3, name: "pqr", userid: "456"},
  {id: 4, name: "xyz", userid: "123"}
];
const result = new Map()
arr.forEach(node => {
  if(node.userid !== "0"){
    result.set(node.userid,node);
  }
})
console.log([...result.values()]); // log intended results

For shorthanded solution you can use:

const result = [...new Map(arr.filter(node=>node.userid!=="0").map(node=>[node.userid, node])).values()];
console.log(result) // log intended results

CodePudding user response:

Maybe that might me done in a more short-hand way, but it works this way:

const arr = [
          {id: 0, name: "abc", userid: "0"},
          {id: 1, name: "lmn", userid: "123"},
          {id: 3, name: "pqr", userid: "456"},
          {id: 4, name: "xyz", userid: "123"}
        ];

const clearZero = arr.filter((obj) => obj.id != 0);
const finalArray = [];

clearZero.forEach((obj) => {
  if (finalArray.every((elem) => elem.userid !== obj.userid)) {
    finalArray.push(obj);
  }
})

console.log(finalArray); // logs out no. 1 and no.3
  • Related