fork download
  1. // 1. Clean each name: trim whitespace, convert to title case ("Alice Chen")
  2. const sanName = (name) => name.split(" ").filter(Boolean).map((w) => w[0].toUpperCase() + w.slice(1).toLowerCase()).join(" ");
  3.  
  4. // 2. Remove duplicates (case-insensitive comparison)
  5. const dedupNames = (names) => {
  6. const seen = new Set();
  7. return names.filter((n) => {
  8. const key = n.toLowerCase();
  9. if (seen.has(key)) return false;
  10. seen.add(key);
  11. return true;
  12. });
  13. };
  14.  
  15. // 3. Sort alphabetically
  16. const sortName = (names) => [...names].sort((a, b) => a.localeCompare(b));
  17.  
  18. // +extra
  19. const flagDups = (names) => {
  20. const counts = {};
  21. names.forEach((n) => (counts[n] = (counts[n] || 0) + 1));
  22. return Object.keys(counts).filter((n) => counts[n] > 1);
  23. };
  24.  
  25. // test
  26. const rawNames = [
  27. " alice Chen", "BOB martinez ", "alice chen",
  28. " Carlos ruiz", "Diana WONG", "bob Martinez",
  29. " eva Kim ", "Carlos Ruiz"
  30. ];
  31.  
  32. const result = sortName(dedupNames(rawNames.map(sanName)));
  33.  
  34. console.assert(
  35. JSON.stringify(result) === JSON.stringify(["Alice Chen", "Bob Martinez", "Carlos Ruiz", "Diana Wong", "Eva Kim"]),
  36. "dedup/sort failed", result
  37. );
  38.  
  39. console.assert(
  40. JSON.stringify(flagDups(rawNames.map(sanName))) === JSON.stringify(["Alice Chen", "Bob Martinez", "Carlos Ruiz"]),
  41. "flagDups failed"
  42. );
  43.  
  44.  
Success #stdin #stdout 0.04s 42456KB
stdin
Standard input is empty
stdout
Standard output is empty