2017-04-04 13 views
0

文字列があり、マップ関数を使用して文字列を大文字にする必要があります。それはこのようなものになるだろう:マップを使用して、1秒ごとに1文字ずつ大文字に変換します。

var str = 'hello world how ya doing?'; 
 
function toUpperCase(str){ 
 
    return str.split('').map((v,i) => i%2 == 0 ? v[i].toLowerCase(): v[i].toUpperCase()).join(''); 
 
} 
 

 
console.log(toUpperCase(str));

しかし、私はそれを実行したとき、私は大文字で文全体を取得します。

+0

あなたの実際のコードを表示してください:私は、私はそれがあなたにクリアされます願って、あなたのコードを修正しました。それはエラーを投げ、それは文全体を大文字にしません。 – JJJ

+0

@OunknownO質問のタイトルを「単語のすべての2文字目」に変更する必要があります。 – Mamun

答えて

2

v引数は実際には配列内のすべての文字を保持するので、v[i]は意味を持ちません。

var str = 'hello world how ya doing?'; 
 

 
function toUpperCase(str) { 
 
    return str.split('').map((v, i) => i % 2 == 0 ? v.toLowerCase() : v.toUpperCase()).join(''); 
 
} 
 

 
console.log(toUpperCase(str));

は、私はあなたがupperCaseを毎秒手紙をオンにするためのものと思いますが、あなたは本当に全体の単語を気にしている場合:

var str = 'hello world how ya doing?'; 
 

 
function toUpperCase(str) { 
 
    return str.split(' ').map((v, i) => i % 2 == 0 ? v.toLowerCase() : v.toUpperCase()).join(' '); 
 
} 
 

 
console.log(toUpperCase(str));

+0

これは他のすべての文字ではなく、すべての文字を変換します。それを修正するために、 'split'と' join'パラメータを ''''(1つの空白文字)に変更してください。 – MrWillihog

+0

@MrWillihog私はちょうど彼が大文字であることを望んでいると思っていましたが、大文字になるようにすべての2番目の全体の単語で代替ソリューションを追加した場合に備えて。 –

+0

両方の答えに感謝します(私が最初に必要でした) – OunknownO

1

試してみてください以下:あなたは、配列の値から単一文字を読んでいる

var str = 'hello world how ya doing?'; 
 
var res = str.split(' ').map(function(v,i){ 
 
    return i%2 === 0 ? v.toLowerCase():v.toUpperCase() 
 
}); 
 
console.log(res.join(' '));

1

val.map(function(val, i)は、単語の配列内のすべての単一文字列になります。

var str = 'hello world how ya doing?'; 
 

 
console.log(toUpperCase(str)); 
 

 
function toUpperCase(str){ 
 
    var words = str.split(' '); 
 
    var uppers = words.map(function(val, i) { 
 
    if(i%2 == 0) 
 
     return (val + "").toLowerCase(); 
 
    else 
 
     return (val + "").toUpperCase(); 
 
    }); 
 
    return uppers.join(' '); 
 
}

関連する問題