CodeWars(三)-----'Bart, Lisa & Maggie'.

嘻嘻,开年第一篇~~~ 新的一年,加油加油~

题目~

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中分别对应的是一个英文名。需要做的就是将第一个英文名后面添加一个“,”在倒数两个之间添加一个”&“。 如果只存在一个单词,那么就返回初始单词,如果是有两个参数,那么之间就用”&“连接。如果是空的数组,那么就返回一个空的字符。注意,输出的是字符串,是字符串,是字符串

操作步骤:(请原谅我的蠢…)

扫描二维码关注公众号,回复: 9354813 查看本文章

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")

向大佬们学习!!!:)

发布了35 篇原创文章 · 获赞 2 · 访问量 9837

猜你喜欢

转载自blog.csdn.net/qq_39532595/article/details/85567932