2017-04-04 68 views
0

我有一個字符串,需要使用地圖功能將其變爲大寫。這將是這樣的:使用地圖將每個第二個字符變成大寫

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

@OnnnownO您應該將您的問題標題更改爲「該單詞的每個第二個字符」。 – 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'參數更改爲''''(單個空格字符)來修復它。 – MrWillihog

+0

@MrWillihog我只是認爲他希望每一個字母都是大寫,但是爲了防止我添加了替代解決方案,並且每一個整個單詞都是大寫字母。 –

+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

您正在閱讀從數組的值的單個字符。

.map(function(val, i)的參數val將是單詞數組中的每一個字符串。我定你的代碼,我希望它會清除你:

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(' '); 
 
}

相關問題