嘻嘻,开年第一篇~~~ 新的一年,加油加油~
题目~
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 ‘.’.
题目大意:
就是给一个数组~ 数组里面存储的是对象,对象的属性是name,name中分别对应的是一个英文名。需要做的就是将第一个英文名后面添加一个“,”在倒数两个之间添加一个”&“。 如果只存在一个单词,那么就返回初始单词,如果是有两个参数,那么之间就用”&“连接。如果是空的数组,那么就返回一个空的字符。注意,输出的是字符串,是字符串,是字符串
操作步骤:(请原谅我的蠢…)
1.数据为空的时候输出空
2.数据长度为1的时候,原样输出
3.数据长度为2的时候,两个用&连接
4.数据长度大于3的时候,第一个用, 后面两个用&连接
代码如下:
function list(names){
var res ='';
if(names.length===0){
return '';
}else if(names.length===1){
return names[0].name;
}else if(names.length===2){
return names[0].name+' & '+names[1].name;
}else{
res+=names[0].name+', '
for(let i=1;i<names.length-2;i++){
res +=names[i].name+', ';
}
res+= names[names.length-2].name+ ' & '+names[names.length-1].name;
return res;
}
}
二:看见思路后的启发,每一次都取出第一个。然后进行拼接。
function list2(names) {
var result = "";
var comma = ", ";
var and = " & ";
while (names.length) {
result += names.shift().name;
if (names.length == 1) {
result += and;
} else if (names.length > 1) {
result += comma;
}
}
return result;
}
呵,就这题,被自己蠢哭,数组长度计算错误,唉。。
自己写代码还是不够精简,还是不够深入,欸~ 接下来看看大佬代码
采用reduce的~
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;
}
}, '');
}
这是我认为最聪明的。。
function list(names) {
var xs = names.map(p => p.name)
var x = xs.pop()
return xs.length ? xs.join(", ") + " & " + x : x || ""
}
以及这个
var list = (names) => names.map(x => x.name).join(', ').replace(/(.*),(.*)$/, "$1 &$2")
向大佬们学习!!!:)