[英]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');
根據您的代碼,很少有觀察:
n
的值,因此應將其定義為let
而不是const
。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.