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');
}