函数只返回首字母大写

时间:2017-12-04 16:04:18

标签: javascript

我有一个功能就是这样做:

accum("abcd");    // "A-Bb-Ccc-Dddd"
accum("RqaEzty"); // "R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy"

我们可以看到第一个" for"循环由它的当前(index + 1)重复每个子串。它将它推送到数组,输出将是[ 'a', 'bb', 'ccc', 'dddd' ]

很明显,我需要迭代这个数组并将下面第二个for循环完成的每个字符串大写。 问题是,当我返回数组时,它返回如下:[ 'A', 'B', 'C', 'D' ]

它返回每个字符串的第一个子字符串,但它不会返回其余字符串。

function accum(s) {
    var splitstring = s.split("")
    var newarray = []
    for(var i = 0; i < splitstring.length; i++) {
        newarray.push(splitstring[i].repeat(i + 1))
    }
    for (var i = 0; i < newarray.length; i++) {
        newarray[i]  = newarray[i].charAt(0).toUpperCase()    
    }
    return newarray
}
accum("abcd")

2 个答案:

答案 0 :(得分:3)

那是因为你只用第一个字符覆盖了字符串。你需要连接字符串的其余部分。

  for (var i = 0; i < newarray.length; i++) {
    newarray[i]  = newarray[i].charAt(0).toUpperCase() + newarray[i].slice(1);
  }

以下是您的代码的较短版本:

function accum(s) {
  return s.split("").map((ss, i) => ss.toUpperCase() + ss.repeat(i)).join("-");
}

console.log(accum("abcd"));

它还会添加您似乎想要的分隔符。如果您确实想要数组,请删除.join("-")

答案 1 :(得分:0)

无需使用第二个for循环。只需在返回的数组上使用map()

function accum(s) {
  var splitstring = s.split("");
  var newarray = [];
  for(var i= 0; i < splitstring.length; i++) {
    newarray.push(splitstring[i].repeat(i + 1))
  }
  return newarray.map(j=>j[0].toUpperCase()+ j.slice(1)).join('-');
}

console.log(accum("abcd"));