为什么字符串数组中的第一个字母不转换为大写?

时间:2018-10-20 13:08:50

标签: javascript

我接受输入字符串"ZpglnRxqenU"

,并且必须在该视图中返回字符串 "Z-Pp-Ggg-Llll-Nnnnn-Rrrrrr-Xxxxxxx-Qqqqqqqq-Eeeeeeeee-Nnnnnnnnnn-Uuuuuuuuuuu"

我几乎完成了,但是我不知道为什么数组元素中的第一个字母不会变为大写。

function accum(s) {
  let str = s.toLowerCase();
  let arr = [];
  
  for(let i=0; i<str.length;i++){
      arr.push(str[i].repeat(i+1));
      arr[i][0].toUpperCase();
  }
  
  return arr.join('-');
}



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

// must be "Z-Pp-Ggg-Llll-Nnnnn-Rrrrrr-Xxxxxxx-Qqqqqqqq-Eeeeeeeee-Nnnnnnnnnn-Uuuuuuuuuuu"

5 个答案:

答案 0 :(得分:2)

字符串是不可变的,仅使用.toUpperCase()不会更新现有字符串,为此,您可以尝试下面的代码

mappend

答案 1 :(得分:1)

Javascript中的字符串是不可变的,因此如果要进行转换,则必须为arr[i] = arr[i][0].toUpperCase() + arr[i].slice(1)

toUpperCase()返回字符,它不会操纵被调用的字符串

String.prototype上的任何其他方法(例如String.replace()

要更加清楚:在Javascript中更改包含字符串的变量的唯一方法是为该变量分配新值

function accum(s) {
  let str = s.toLowerCase();
  let arr = [];
  
  for(let i=0; i<str.length; i++){
      arr.push(str[i].repeat(i+1));
      arr[i] = arr[i][0].toUpperCase() + arr[i].slice(1);
  }
  
  return arr.join('-');
}



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

答案 2 :(得分:1)

您可以这样操作,并删除不必要的Traceback (most recent call last): File "<ipython-input-30-b2a4f400dbe9>", line 1, in <module> runfile('C:/Program Files (x86)/WinPython-64bit-3.3.5.9/python-3.3.5.amd64/Scripts/orbit/3dnbody_2dprojection.py', wdir='C:/Program Files (x86)/WinPython-64bit-3.3.5.9/python-3.3.5.amd64/Scripts/orbit') File "C:\Program Files (x86)\WinPython-64bit-3.3.5.9\python-3.3.5.amd64\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 685, in runfile execfile(filename, namespace) File "C:\Program Files (x86)\WinPython-64bit-3.3.5.9\python-3.3.5.amd64\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 85, in execfile exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace) File "C:/Program Files (x86)/WinPython-64bit-3.3.5.9/python-3.3.5.amd64/Scripts/orbit/3dnbody_2dprojection.py", line 56, in <module> ani=FuncAnimation(fig,animate,frames=1000,interval=1,blit=False) File "C:\Program Files (x86)\WinPython-64bit-3.3.5.9\python-3.3.5.amd64\lib\site-packages\matplotlib\animation.py", line 1067, in __init__ TimedAnimation.__init__(self, fig, **kwargs) File "C:\Program Files (x86)\WinPython-64bit-3.3.5.9\python-3.3.5.amd64\lib\site-packages\matplotlib\animation.py", line 913, in __init__ *args, **kwargs) File "C:\Program Files (x86)\WinPython-64bit-3.3.5.9\python-3.3.5.amd64\lib\site-packages\matplotlib\animation.py", line 591, in __init__ self._init_draw() File "C:\Program Files (x86)\WinPython-64bit-3.3.5.9\python-3.3.5.amd64\lib\site-packages\matplotlib\animation.py", line 1092, in _init_draw self._draw_frame(next(self.new_frame_seq())) File "C:\Program Files (x86)\WinPython-64bit-3.3.5.9\python-3.3.5.amd64\lib\site-packages\matplotlib\animation.py", line 1106, in _draw_frame self._drawn_artists = self._func(framedata, *self._args) File "C:/Program Files (x86)/WinPython-64bit-3.3.5.9/python-3.3.5.amd64/Scripts/orbit/3dnbody_2dprojection.py", line 54, in animate planets._offsets3d(positions[:,0],positions[:,1],positions[:2]) TypeError: 'tuple' object is not callable

F(2)

答案 3 :(得分:0)

字符串是不可变的。使用toUpperCase()不会更改原始字符串。取而代之的是,它将返回一个新字符串。您必须将此新字符串保存在所需的位置:

arr[i][0] = arr[i][0].toUpperCase();

答案 4 :(得分:0)

您可以利用Array.from的功能,以字符为单位获取字符串,并将第一个大写字符和重复的字符映射为新字符串。

最后,将所有项目连接到单个字符串。

function accum(s) {
    return Array
        .from(s.toLowerCase(), (c, i) => c.toUpperCase() + c.repeat(i))
        .join('-');
}

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