Algorithm 11 - [JS] Format a string of names

Format a string of names like 'Bart, Lisa & Maggie'.

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.

Example:

list([ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'} ])
// returns 'Bart, Lisa & Maggie'

list([ {name: 'Bart'}, {name: 'Lisa'} ])
// returns 'Bart & Lisa'

list([ {name: 'Bart'} ])
// returns 'Bart'

list([])
// returns ''

Note: all the hashes are pre-validated and will only contain A-Z, a-z, '-' and '.'.

📌 Needs ) &로 구분해야 하는 마지막 두 이름을 제외하고 쉼표로 구분된 이름 목록 형식의 문자열을 반환하라.

📁 Sol ) if 조건문과 map, 조건부 연산자 ? 사용

function list(names){
  let str = '';
  if (names.length !== 0) {
    let last = names.pop();
    str = names.map( (val, i, arr) => {
      if (i !== arr[arr.length - 1]) {
        return val.name;
      }
    }).join(', ')
     
    str += str !== '' ? ' & ' + last.name : last.name;
  }
   
  return str;
}

💡 Other ways to solve ) replace 사용하여 코드 단순화

function list(names) {
  return names.map(o => o.name).join(', ').replace(/^(.*)(, )(.*)$/, '$1 & $3');
}

좋은 웹페이지 즐겨찾기