Skip to content
Merge User Data - JavaScript

Merge User Data – JavaScript

Given an array of objects with user data, merge the data combining the data of each user by adding their duration and equipment data. Equipment used must be merged without duplicates and then sorted in alphabetical order.

🔗 Data Merging 🟡 Medium 🧩 Pattern – Arrays & Objects

Related: Join Two Arrays by ID – 2722 | Matrixread

Example

[
  { user: 3, duration: 75, equipment: ['rowing machine'] },
  { user: 5, duration: 120, equipment: ['elliptical'] },
  { user: 4, duration: 30, equipment: ['jump rope'] },
  { user: 6, duration: 90, equipment: ['dumbbell', 'step'] },
  { user: 5, duration: 60, equipment: ['treadmill'] },
  { user: 9, duration: 180, equipment: ['stationary bike'] },
  { user: 3, duration: 45, equipment: ['medicine ball'] },
]
Code language: JavaScript (javascript)

Solution

/**
 * @param {Array<{user: number, duration: number, equipment: Array<string>}>} sessions
 * @return {Array}
 */
export default function mergeData(sessions) {
  // Map stores unique users.
  const merged = new Map();
  sessions.forEach(({ user, duration, equipment }) => {
    if (merged.has(user)) {
      let newData = merged.get(user);
      newData.duration += duration;
      // Set does not store duplicates.
      newData.equipment = [...new Set([...equipment, ...newData.equipment])];
    } else {
      // Creating a new object to avoid modifying input.
      merged.set(user, { user, duration, equipment });
    }
  });
  // Creating an array from Map object and sort equipment before returning.
  return Array.from(merged.values()).map(({ user, duration, equipment }) => ({
    user,
    duration,
    equipment: Array.from(equipment).sort(),
  }));
}Code language: JavaScript (javascript)
Back to Top