繁体   English   中英

为什么长度 function 在此 for 循环中不起作用?

[英]Why is the length function not working in this for loop?

为什么这段代码在使用长度 function 后不起作用?

如果我使用for(n of names)这个 for 循环那么它工作正常!

我正在尝试将names数组的每个首字母大写。 所以,首先我拆分名称以获得每个名称。 然后通过使用循环我想重申名字的每个首字母,通过使用toUpperCase()我将第一个字母设为大写并通过使用slice(1) ,我将 rest 部分的名字分开,期望第一个字母。

 const namingConvention = function(name) { const names = name.split(' '); const nameProper = []; for (const n = 0; n <= names.length; n++) { const r = n[0].toUpperCase() + n.slice(1); nameProper.push(r); } console.log(nameProper.join(' ')); } namingConvention('mk. john akm'); namingConvention('timari davis');

根据您的代码,很少有观察

  • 由于我们在 for 循环的每次迭代中更新n的值,因此应将其定义为let而不是const
  • For 循环条件应该是n < names.length而不是n <= names.length
  • 操作名称的逻辑不正确, names数组中的每个名称都应该像这样访问names[n]而不是n[0]

根据您的代码工作演示

 const namingConvention = function(name) { const names = name.split(' '); const nameProper = []; for (let n = 0; n < names.length; n++) { const r = names[n].charAt(0).toUpperCase() + names[n].slice(1); nameProper.push(r); } console.log(nameProper.join(' ')); } namingConvention('mk. john akm'); namingConvention('timari davis');

Workind 演示(更优化/紧凑的解决方案)

 const namingConvention = function(name) { const names = name.split(' '); const nameProper = names.map(n => n.charAt(0).toUpperCase() + n.slice(1)) console.log(nameProper.join(' ')); } namingConvention('mk. john akm'); namingConvention('timari davis');

您正在使用 n,它是一个数字作为数组,正确的用法是用名称 [n] 替换 n,因为 n 是索引,名称是您要遍历的数组

您还需要将 n 和名称 Poper 更改为普通变量而不是常量。

常量使变量不可更改并且在整个循环中相同。 您还可以使用 charAt(0) 获取第一个字母

 const namingConvention = function(name){ const names = name.split(' '); var nameProper = [];//var so it can be changed for(var n = 0; n<names.length;n++){//var n so the n can change const r = names[n].charAt(0).toUpperCase() + names[n].slice(1);//names[n] is the string charAt gets the first letter nameProper.push(r); } console.log(nameProper.join(' ')); } namingConvention('mk. john akm'); namingConvention('timari davis');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM