Start a personal dev blog on your domain for free with Hashnode and grow your readership.
Get Started

Easy peasy formatting list

Given an array containing hashes of names. You have to return a string formatted as a list of names separated by commas except for the last two names, which should be separated by &.

formatList([ {name: 'Dave'}, {name: 'Alex'}, {name: 'Marge'} ])
// returns 'Dave, Alex & Marge'

Here's a single line solution, regex peeps

let formatList = (names) => names.map(x => x.name).join(', ').replace(/(.*),(.*)$/, "$1 &$2");

But this is the most clever solution, I could never think of:

let formatList = (names) => {
  let a = names.map(obj => obj.name);
  let name = a.pop();
  return a.length ? a.join(", ") + " & " + name : name || "";
}

I could think of using reduce, forEach and other looping methods using if else. reduce does a pretty great job itself.

let formatList = (names) => {
  return names.reduce((prev, curr, i, arr) => {
    return prev + curr.name + (i < arr.length - 2 ? ', ' : i == arr.length - 2 ? ' & ' : '');
  }, '');
}
Start a personal dev blog on your domain for free and grow your readership.

3.4K+ developers have started their personal blogs on Hashnode in the last one month.

Write in Markdown · Publish articles on custom domain · Gain readership on day zero · Automatic GitHub backup and more

No Comments Yet