我想背诵随机名称并将它们的第一个字母大写,但是当我在 .split(' ') 中放置空格时,我的代码分解

i suppose to recive random names and uppercase their first letter but when i put empty space in .split(' ') , my code breakdown

提问人:oktay mozaffari 提问时间:10/7/2023 最后编辑:kyle1901oktay mozaffari 更新时间:10/8/2023 访问量:48

问:

const capitalizeName = function (name) {
  const names = name.split(` `);
  const uppercasedName = [];

  for (const n of names) {
    //uppercasedName.push(n[0].toUpperCase() + n.slice(1));
    uppercasedName.push(n.replace(n[0], n[0].toUpperCase()));
  }
  console.log(uppercasedName.join(''));
};
capitalizeName('jessica ann smith davis ');

控制台显示问题出在upperName部分,但是当我删除name.split(' ')中的空间时,代码将起作用,但这次将所有字符串字母封盖

JavaScript 字符串 拆分

评论

0赞 Konrad 10/7/2023
显示错误消息

答:

1赞 volkerschulz 10/7/2023 #1

因为

capitalizeName('jessica ann smith davis ');

有一个尾随空间,

name.split(` `);

名称末尾放置一个空元素

在拆分之前删除空间或修剪:

const capitalizeName = function (name) {
    const names = name.trim().split(' ');
    const upperName = [];

    for (const n of names) {
        //upperName.push(n[0].toUpperCase() + n.slice(1));
        upperName.push(n.replace(n[0], n[0].toUpperCase()));
    }
    console.log(upperName.join(''));
};
capitalizeName('jessica ann smith davis ');

编辑:@jdkramhoft在他的答案中显示了第三个选项:在for循环中验证n。

1赞 jdkramhoft 10/7/2023 #2

由于末尾的空格,您的示例正在中断,并且适用于 .'jessica ann smith davis ''jessica ann smith davis'

这是因为 split 会将尾随空格标识为空字。解决此问题的最简单方法是不要尝试将未定义的字符串大写。如果你想在最终结果之间留出空格,你可以用一个空格字符连接起来:join(' ')

const capitalizeName = function (name) {
  const names = name.split(` `);
  const upperName = [];

  for (const n of names) {
    n && upperName.push(n.replace(n[0], n[0].toUpperCase()));
  }
  return upperName.join(' ')
};
console.log(capitalizeName('jessica ann smith davis '));

评论

0赞 oktay mozaffari 10/8/2023
非常感谢您指出该错误,它现在可以正常工作