2017-12-04 19 views
0

を大文字。それを配列にプッシュし、出力は[ 'a', 'bb', 'ccc', 'dddd' ]機能は、私はこれを行うことを意図している機能を持っている

となります。私はこの配列を反復処理し、以下の2番目の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") 
+1

あなたはあなたの第二のループでは、文字列全体を上書きしています。方法については[this](https://stackoverflow.com/questions/1431094/how-do-i-replace-a-character-at-a-particular-index-in-javascript)をご覧ください。 –

+1

'newarray [i] = newarray [i] .charAt(0).toUpperCase()' < - 最初の文字に置き換えてしまうので、あなたの問題であるようです。 – epascarello

答えて

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"));

+0

申し訳ありません、上記参照:---> "A-Bb-Ccc-Dddd" – monkeybanana

+0

@monkeybanana、私は私の答えを更新しました。どうぞご覧ください...ありがとうございます。 – Mamun

3

これは、文字列を最初の文字で上書きしているためです。残りの文字列を連結する必要があります。

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

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

それはまた、あなたが望むように見えるのセパレータを追加します。

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

ここにあなたのコードの短縮版です。実際に配列が必要だった場合は、.join("-")を削除してください。

関連する問題