您的位置:首页 > 编程语言

编程题目:格式化名字字符串

2016-07-14 15:39 417 查看
题目: Format a string of names like ‘Bart, Lisa & Maggie’

来源:https://www.codewars.com/kata/format-a-string-of-names-like-bart-lisa-and-maggie/javascript

描述:

+ 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.

分析:

很简单的字符串拼接的题目,主要考察对数组的操作,给你一个包含很多名字的对象数组,讲这些名字按一定的规律拼接成字符串,方法有很多中,但是要编写的更为clever。

1. 方法一:

首先考虑使用最简单的
array.map()
方法来进行数组的遍历,使用
if-else
来进行条件判断,将数组的每一项进行相应的格式化组成新的数组,最后将新的数组使用
join()
方法拼接起来。

function list(names) {
var len = names.length
var arr = names.map(function(val, index) {
if(index < len-2) {
return val.name + ', '
} else if (index === len-2) {
return val.name + ' & '
} else {
return val.name
}
})
return arr.join('');
}


方法太笨,不太好。

2. 方法二:

使用
array.reduce()
方法来进行数组的遍历,使用
? :
三目操作符来进行条件判断,利用
array.slice()
方法截断数组,将数组的第零项作为参数传给
reduce()
方法作为第一个prev。

function list(names){
return names.length ? names.slice(1).reduce((pre, current, index) => {
return pre + (index<names.length-2 ? ', ' + current.name : ' & ' + current.name)
}, names[0].name) : ''
}


还是不够clever,这个方法有个问题,在第二行return语句上加上了一个对数组长度的判断,因为如果不加这个判断,输入的数组为空的话,就会因为使用了
names[0].name
语句报错。

3. 方法三

同样使用
reduce()
方法来进行遍历与组合,但是不再使用
slice()
方法截断数组,直接采用三目运算符的嵌套来进行条件判断,clever!

function list2(names) {
return names.reduce((prev, curr, i) => {
return prev + curr + (i<names.length-2) ? ', ' : i===names.length-2 ? ' & ' : ''
}, '')
}


利用三目运算符的嵌套实现多重判断!!,这个要学会使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  codewars