0

I have the following arrays of object:

var arr = [
  {name: 'rajendra', last: 'arora'},
  {name: 'rajendra', last: 'arora2'},
  {name: 'rajendra1', last: 'arora22'},
  {name: 'rajendra2', last: 'arora233'},
  {name: 'rajendra2', last: 'arora23'},
  {name: 'rajendra3', last: 'arora3'},
  {name: 'rajendra3', last: 'arora3'},
  {name: 'rajendr3', last: 'arora3'}
]

I want to remove the duplicate objects via key name name. My expected output:

var arr = [
  {name: 'rajendra', last: 'arora'},
  {name: 'rajendra1', last: 'arora22'},
  {name: 'rajendra2', last: 'arora233'},
  {name: 'rajendra3', last: 'arora3'},
  {name: 'rajendr3', last: 'arora3'}
]

I had tried below the following program:

function _unique(arr) {
  let uniqueArr = [];

  for (var i = 0; i < arr.length; i++) {
    for(var j=i+1; j<arr.length; j++) {
      if(arr[i].name.indexOf(arr[j].name) == -1) {
        uniqueArr.push(arr[j])
      }
    }
  }
  // console.log(uniqueArr[0].name.indexOf("rajendra"))
  return uniqueArr;
}

console.log(_unique(arr))

But it is not working.

HELP WOULD BE APPRECIATED!!

  • Possible duplicate of [Remove duplicates from an array of objects in JavaScript](https://stackoverflow.com/questions/2218999/remove-duplicates-from-an-array-of-objects-in-javascript) – Atomzwieback Dec 07 '18 at 10:29
  • Possible duplicate of [Remove Duplicate objects from JSON Array](https://stackoverflow.com/questions/23507853/remove-duplicate-objects-from-json-array) – HudsonPH Dec 07 '18 at 10:30

4 Answers4

2

reduce into an object indexed by name, assigning to the property only if no item already exists at that property, then get that object's values:

var arr = [
  {name: 'rajendra', last: 'arora'},
  {name: 'rajendra', last: 'arora2'},
  {name: 'rajendra1', last: 'arora22'},
  {name: 'rajendra2', last: 'arora233'},
  {name: 'rajendra2', last: 'arora23'},
  {name: 'rajendra3', last: 'arora3'},
  {name: 'rajendra3', last: 'arora3'},
  {name: 'rajendr3', last: 'arora3'}
];
const output = Object.values(arr.reduce((a, item) => {
  if (!a[item.name]) a[item.name] = item;
  return a;
}, {}));
console.log(output);
CertainPerformance
  • 356,069
  • 52
  • 309
  • 320
1

var arr = [
  {name: 'rajendra', last: 'arora'},
  {name: 'rajendra', last: 'arora2'},
  {name: 'rajendra1', last: 'arora22'},
  {name: 'rajendra2', last: 'arora233'},
  {name: 'rajendra2', last: 'arora23'},
  {name: 'rajendra3', last: 'arora3'},
  {name: 'rajendra3', last: 'arora3'},
  {name: 'rajendr3', last: 'arora3'}
];

var resultArr = arr
  .sort((a, b) => a.name-b.name )
  .reduce((accu, curr, i) => {
    let length = accu.length;
    if(length == 0 || accu[length - 1].name !== curr.name) {
      accu.push(curr);
    }
    return accu;
  }, []);

console.log(resultArr);
random
  • 7,756
  • 3
  • 19
  • 25
0

You can use .reduce() and Object.values() to get the resultant array:

let data = [
  {name: 'rajendra', last: 'arora'},    {name: 'rajendra', last: 'arora2'},
  {name: 'rajendra1', last: 'arora22'}, {name: 'rajendra2', last: 'arora233'},
  {name: 'rajendra2', last: 'arora23'}, {name: 'rajendra3', last: 'arora3'},
  {name: 'rajendra3', last: 'arora3'},  {name: 'rajendr3', last: 'arora3'}
];

let result = Object.values(data.reduce((r, c) => (r[c.name] = r[c.name] || c, r), {}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Mohammad Usman
  • 37,952
  • 20
  • 92
  • 95
0

I have small edit to your existing solution:

function _unique(arr) {
  let uniqueArr = [];

  for (var i = 0; i < arr.length; i++) {
    let existed = false
    for (var j = 0; j < uniqueArr.length; j++) 
      if (arr[i].name === uniqueArr[j].name) {
        existed = true
        break
      }

    if (existed) continue
    uniqueArr.push(arr[i])
  }

  return uniqueArr;
}
hgb123
  • 13,869
  • 3
  • 20
  • 38