Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

178
Views
merge an array of objects where one property is the same, while transferring the unique values of another property into an array

I have an array of objects in which most of the properties may be duplicates of each other, but one value may differ:

const originalArray = [
  { id: 1, name: 'x', 'description': 'x', url: 'y' },
  { id: 2, name: 'x', 'description': 'x', url: 'z' }
]

I want to dedupe this array based on a difference of name, but retain the URL differences as an array in the deduped array:

const dedupedArray = [
  { id: 1, name: 'x', 'description': 'x', url: ['y','z'] },
]
function removeDuplicatesByProperty(keyFn, array) {
  const mySet = new Set();
  return array.filter(function (x) {
    const key = keyFn(x),
      isNew = !mySet.has(key);
    if (isNew) mySet.add(key);
    return isNew;
  });
}

const dedupedArray = removeDuplicatesByProperty((x) => x.name, originalArray);
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

You can use Array.reduce:

const originalArray = [
  { id: 1, name: 'x', 'description': 'x', url: 'y' },
  { id: 2, name: 'x', 'description': 'x', url: 'z' }
]

const res = originalArray.reduce((a,b) => {
  const found = a.find(e => e.name == b.name);
  return found ? found.url.push(b.url) : a.push({...b, url:[b.url]}), a;
}, [])

console.log(res)

about 4 years ago · Juan Pablo Isaza Report

0

Reduce the array to a Map, and merge duplicates using a mergeFn. Convert the Map.values() iterator back to an array using Array.from() or array spread:

const originalArray = [
  { id: 1, name: 'x', 'description': 'x', url: 'y' },
  { id: 2, name: 'x', 'description': 'x', url: 'z' }
]

const dedupeMerge = (keyFn, mergeFn, array) => Array.from(
  array.reduce((acc, o) => {
    const key = keyFn(o);
    
    if(!acc.has(key)) return acc.set(key, o);
    
    return acc.set(key, mergeFn(acc.get(key), o));
  }, new Map()).values()
);

const dedupedArray = dedupeMerge(
  x => x.name, 
  (o1, o2) => ({ ...o1, url: [o1.url, o2.url].flat() }),
  originalArray
);

console.log(dedupedArray);

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!