[ CodeWar ] - 009:格式化字符串

221 阅读1分钟

系列文章

题目

img-01

需求:

  • 输入的是一个数组,其元素是一个带有 name 属性的 object
  • 需要将输入的数组中的 name 拼接起来
  • 非末位用 ,
  • 末位用 &

解析

这道题还是非常简单的,并且前面也做过类似的,所以就不从最简单的方案开始分析了。

其实从前面的经验看来,涉及到字符串格式化一类的操作,往往使用正则会有非常好的体验,那么这里我们看看怎么使用正则来完成这个功能。

  • 首先我们可以通过 map(), join() 等操作将 name 提取出来,并且转化成一个完整的字符串
  • 这里我们通过 join(", ") 来拼接,那么最终的字符串就类似(长度大于 1):a, b, c
  • 对于形如上述的字符串,我们可以通过 .*, 匹配到最后一位前面的所有字符,再通过 .* 匹配到最后一个字符
  • 最后将两个所匹配到的结果分组,用 & 拼接在一起获得最终结果
const list = (names) =>
  names
    .map((name) => name.name)
    .join(', ')
    .replace(/(.*),(.*)$/'$1 &$2')