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

题目: 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 ? ' & ' : ''
  }, '')
}

利用三目运算符的嵌套实现多重判断!!,这个要学会使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值