September 8th 2018
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'
배열이 주어지면 배열 내 객체의 'name' 속성의 string을 위와 같이 포맷 후 반환하는 문제입니다. 저는 다음과 같은 방식으로 문제를 풀었습니다.
function list(names) {
var namesArr = names.map(function(cur) {
return cur['name'];
});
if (namesArr.length > 1) {
namesArr.splice(-1, 0, '&');
}
return namesArr.join(', ').replace(', &, ', ' & ');
}
문제 풀이 후, 가장 추천수를 많이 받은 코드를 참고했습니다. reduce를 사용했으며 코드 읽기가 더 수월한 것 같습니다.
reduce로 배열의 각 요소를 ', '로 연결하고 마지막 index에서만 ' & '로 연결한 accumulation을 반환했습니다.
function list(names) {
return names.reduce(function(prev, current, index, array) {
if (index === 0) {
return current.name;
} else if (index === array.length - 1) {
return prev + ' & ' + current.name;
} else {
return prev + ', ' + current.name;
}
}, '');
}