在我的程序中,给出了一系列名称的哈希。我想返回一个字符串,该字符串的格式设置为用逗号分隔的名称列表,但最后两个名称除外,后者应使用&分隔。
例如
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 ''
为此,我正在使用map函数映射对象数组的值,并使用切片来提取数组的最后两个值,然后使用toString
将其转换为字符串,然后使用{{1 }}在最后两个元素之间添加&符,但是我没有得到期望的输出。
代码:
split("&")
答案 0 :(得分:3)
这有点棘手,因为您必须先从列表中的其余部分中分离出列表中的最终名称,然后join
。如果剩下的是 ,则将连接的字符串与' and '
连接,否则仅返回最终名称:
function list(people){
const names = people.map(({ name }) => name);
const finalName = names.pop();
return names.length
? names.join(', ') + ' & ' + finalName
: finalName;
}
console.log(list([ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'} ])) // returns 'Bart, Lisa & Maggie'
console.log(list([ {name: 'Bart'}, {name: 'Lisa'} ])) // returns 'Bart & Lisa'
console.log(list([ {name: 'Bart'} ])) // returns 'Bart'
请注意,输入内容不是name
的数组-它是一个对象数组,以后需要映射到names
,因此您可以命名变量更精确地给list
赋予people
(或类似的东西)而不是names
的参数。
答案 1 :(得分:2)
您可以pop
数组中的最后一项,用逗号join
其余的项,然后在最后的项后面附加一个&符号。更新的代码:
function list(names) {
if (names.length === 0) return '';
if (names.length === 1) return names[0].name;
let result = names.map(value => value.name);
let lastName = result.pop();
return result.join(', ') + ' & ' + lastName;
}
let string = list([{name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'}]);
console.log(string);
答案 2 :(得分:0)
这里仅输入代码两个条件:
function myCustomList(persons){
names = persons.map(({ name }) => name);
lastName = names.pop();
return names.length ? names.join(', ') + ' & ' + lastName : lastName;
}
//watch your answer in alert box
alert(myCustomList([ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'} ]));