-2

I have an array with duplicated values, how do I list those out

var result = [ { name: 'Maura Hickman' },
  { name: 'Elena Vega' },
  { name: 'Sylvia Norman' },
  { name: 'Jana Stevenson' },
  { name: 'Colon Reynolds' },
  { name: 'Luisa Rutledge' },
  { name: 'Pearson Marquez' },
  { name: 'Sylvia Norman' },
  { name: 'Jana Stevenson' },
  { name: 'Colon Reynolds' } ]

I have tried doing this

var obj = [ { name: 'Maura Hickman' },
  { name: 'Elena Vega' },
  { name: 'Sylvia Norman' },
  { name: 'Jana Stevenson' },
  { name: 'Colon Reynolds' },
  { name: 'Luisa Rutledge' },
  { name: 'Pearson Marquez' },
  { name: 'Sylvia Norman' },
  { name: 'Jana Stevenson' },
  { name: 'Colon Reynolds' } ];
if (Object.values(obj).indexOf('Jana Stevenson') > -1) {
   console.log('has Jana Stevenson');
}

but it didn't work.

what I am expecting is the following

var exist =  [{ name: 'Jana Stevenson'} , {name: 'Sylvia Norman' },
{ name: 'Colon Reynolds'}]
Zachary Lordford
  • 147
  • 3
  • 4
  • 17
  • Is actual results expected output? – Maheer Ali Jun 03 '19 at 15:06
  • 3
    Possible duplicate of [Get all non-unique values (i.e.: duplicate/more than one occurrence) in an array](https://stackoverflow.com/questions/840781/get-all-non-unique-values-i-e-duplicate-more-than-one-occurrence-in-an-array) – Sterling Archer Jun 03 '19 at 15:07
  • please add a valid result. why is in the result only one `'Colon Reynolds'`, but for all other duplicates all of them? – Nina Scholz Jun 03 '19 at 16:02

4 Answers4

1

You can use filter() and findIndex()

var arr = [ { name: 'Maura Hickman' },
  { name: 'Elena Vega' },
  { name: 'Sylvia Norman' },
  { name: 'Jana Stevenson' },
  { name: 'Colon Reynolds' },
  { name: 'Luisa Rutledge' },
  { name: 'Pearson Marquez' },
  { name: 'Sylvia Norman' },
  { name: 'Jana Stevenson' },
  { name: 'Colon Reynolds' },
  { name: 'Colon Reynolds' }]
  
const res = arr.filter((x,i) => arr.findIndex(a => a.name === x.name) !== i)
               .filter((x,i,arr) => arr.find(a => a.name === x.name) === x);
              
console.log(res)
Maheer Ali
  • 35,834
  • 5
  • 42
  • 73
0

Try using Array#prototype#reduce, maintain a helper object, if the key is not already present in the accumulator add it, else push it into the accumulator and finally return the accumulator.

result = [{
    name: 'Maura Hickman'
  },
  {
    name: 'Elena Vega'
  },
  {
    name: 'Sylvia Norman'
  },
  {
    name: 'Sylvia Norman'
  },
  {
    name: 'Sylvia Norman'
  },
  {
    name: 'Jana Stevenson'
  },
  {
    name: 'Colon Reynolds'
  },
  {
    name: 'Luisa Rutledge'
  },
  {
    name: 'Pearson Marquez'
  },
  {
    name: 'Sylvia Norman'
  },
  {
    name: 'Jana Stevenson'
  },
  {
    name: 'Colon Reynolds'
  }
];

// Take the groups which have more than 1 element in it
const duplicateNames = Object.values(result.reduce((acc, curr) => {
  // If not existing in accumulator add it
  if (!acc[curr.name]) {
  acc[curr.name] = [curr];
  }

  // Else push it simply
  else {
 acc[curr.name].push(curr);
  }

  return acc;
}, {}))
.filter(x => x.length > 1)
.map(x => x[0]);

console.log(duplicateNames);
Kunal Mukherjee
  • 5,775
  • 3
  • 25
  • 53
-1

You could take a Set for found names and take the object if found and if not found add the name to the set and return false.

var array = [{ name: 'Maura Hickman' }, { name: 'Elena Vega' }, { name: 'Sylvia Norman' }, { name: 'Jana Stevenson' }, { name: 'Colon Reynolds' }, { name: 'Luisa Rutledge' }, { name: 'Pearson Marquez' }, { name: 'Sylvia Norman' }, { name: 'Jana Stevenson' }, { name: 'Colon Reynolds' }],
    found = new Set,
    duplicates = array.filter(({ name }) => found.has(name) || !found.add(name));

console.log(duplicates);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
-1

First, you have an array, not an object. You shouldn't call your arrays object, as proven, this is confusing. Since {} !== {}, you'll need to actually check for the property you want to make sure to be unique. You can use below reducer, then recreate the array of objects structure.

const res = arr.reduce((a, {name}) => ! a.includes(name) ? a.concat(name) : a, []).map(name => ({name}));
console.log(res)
<script>
const arr = [ { name: 'Maura Hickman' },
    { name: 'Elena Vega' },
    { name: 'Sylvia Norman' },
    { name: 'Jana Stevenson' },
    { name: 'Colon Reynolds' },
    { name: 'Luisa Rutledge' },
    { name: 'Pearson Marquez' },
    { name: 'Sylvia Norman' },
    { name: 'Jana Stevenson' },
    { name: 'Colon Reynolds' } ];
</script>
baao
  • 71,625
  • 17
  • 143
  • 203