Problem
- Given an array containing hashes of names.
- Return a string formatted as a list of names separated by commas except for the last two names, which should be separated by an ampersand.- 쉼표로 구분된 이름 list 형식의 문자열을 반환한다.
- 마지막 두 이름은 ampersand(\&)로 구분한다.
 
Solution 01
function nameList(arr) {
  if (arr.length === 0) return '';
  
  let result = arr[0].name;
  
  if (arr.length === 1) {
    return result;
  }
  
  for (let i = 1; i < arr.length - 1; i++) {
    result += ', ' + arr[i].name;
  }
  
  return result + ' & ' + arr[arr.length - 1].name;
}
nameList([{ name: 'Sam' }]);                                      // Sam
nameList([{ name: 'Sam' }, { name: 'Ralph' }]);                   // Sam & Ralph
nameList([{ name: 'Sam' }, { name: 'Ralph' }, { name: 'Leo' }]);  // Sam, Ralph & Leo
Solution 02
function nameList(arr) {
  let result = '';
  
  while (arr.length) {
    result += arr.shift().name;
    
    if (arr.length === 1) {
      result += ' & ';
    }
    
    if (arr.length > 1) {
      result += ', ';
    }
  }
  return result;
}
nameList([{ name: 'Sam' }]);                                      // Sam
nameList([{ name: 'Sam' }, { name: 'Ralph' }]);                   // Sam & Ralph
nameList([{ name: 'Sam' }, { name: 'Ralph' }, { name: 'Leo' }]);  // Sam, Ralph & Leo
Solution 03
function nameList(arr) {
  return arr.reduce((total, current, index, array) => {
    if (index === 0) {
      return current.name;
    } else if (index === array.length - 1) {
      return total + ' & ' + current.name;
    } else {
      return total + ', ' + current.name;
    }
  }, '');
}
nameList([{ name: 'Sam' }]);                                      // Sam
nameList([{ name: 'Sam' }, { name: 'Ralph' }]);                   // Sam & Ralph
nameList([{ name: 'Sam' }, { name: 'Ralph' }, { name: 'Leo' }]);  // Sam, Ralph & Leo
Solution 04
function nameList(arr) {
  let maping = arr.map(i => i.name);
  let poping = maping.pop();
  
  return maping.length ? maping.join(', ') + ' & ' + poping : poping || '';
}
nameList([{ name: 'Sam' }]);                                      // Sam
nameList([{ name: 'Sam' }, { name: 'Ralph' }]);                   // Sam & Ralph
nameList([{ name: 'Sam' }, { name: 'Ralph' }, { name: 'Leo' }]);  // Sam, Ralph & Leo
Solution 05
function nameList(arr) {
  return arr.map(i => i.name).join(', ').replace(/^(.*)(, )(.*)$/, '$1 & $3');
}
nameList([{ name: 'Sam' }]);                                      // Sam
nameList([{ name: 'Sam' }, { name: 'Ralph' }]);                   // Sam & Ralph
nameList([{ name: 'Sam' }, { name: 'Ralph' }, { name: 'Leo' }]);  // Sam, Ralph & Leo
Solution 06
function nameList(arr) {
  return arr.map(i => i.name).join(', ').replace(/,(?=[^,]*$)/, ' &');
}
nameList([{ name: 'Sam' }]);                                      // Sam
nameList([{ name: 'Sam' }, { name: 'Ralph' }]);                   // Sam & Ralph
nameList([{ name: 'Sam' }, { name: 'Ralph' }, { name: 'Leo' }]);  // Sam, Ralph & Leo