如何忽略字符串索引中的空格并以句子中每个单词的大写字母开头

时间:2016-09-24 11:51:04

标签: javascript string loops

基本上,我有这段代码,我希望将给定的字符串更改为wEiRd CaSe,在索引之间交替,例如:

从索引 0开始我希望这封信是大写的,然后当索引变为奇数时,如1,3,5等...我想把它改成大写。

所以:

Stackoverflow应该 StAcKoVeRfLoW ,但我也想使用字符串,像这样的字符串

This is a test应该是:这是一个TeSt

但是我的功能回归:这是一个TeSt

这是我的代码:

"use strict";

var weirdCase = function(string) {
    var characters = string.split("");

    characters.forEach(function(value, index, characters) {
        // If the index is even
        if (index % 2 == 0) {
            characters[index] = value.toUpperCase();
        } else {
            characters[index] = value.toLowerCase();
        }
    });

    return characters.join("");
}

我的问题可能有点误导,我想成为案例,但也要成为首都的第一个字母,所以我这样做了:

function toWeirdCase(string){
  return string.split(' ').map(function(word){
    return word.split('').map(function(letter, index){
      return index % 2 == 0 ? letter.toUpperCase() : letter.toLowerCase()
    }).join('');
  }).join(' ');
}

希望这有助于某人

6 个答案:

答案 0 :(得分:1)

您可以添加另一个变量charIndex,仅当值不是空格时才手动增加。 charIndex将表示字符串的索引,就像它没有空格一样。

"use strict";

var weirdCase = function(string) {
    var characters = string.split("");
    var charIndex = 0;
    characters.forEach(function(value, index, characters) {
        //Exclude spaces
        if (value === " ") {
            return;
        }

        // If the index is even
        if (charIndex % 2 == 0) {
            characters[index] = value.toUpperCase();
        } else {
            characters[index] = value.toLowerCase();
        }
        //Increment charIndex
        charIndex += 1;
    });

    return characters.join("");
}

答案 1 :(得分:1)

应该这么简单:



function WeIrDcAsE(string) {
  let isUpperCase = true;
  let result = '';
  for (let character of string) {

    if (isUpperCase) {
      result += character.toUpperCase();
    } else {
      result += character.toLowerCase();
    }

    if (character.match(/[a-zA-Z]/)) {
      isUpperCase = !isUpperCase;
    } else {
      isUpperCase = true;
    }
  }
  
  return result;
}

console.log(WeIrDcAsE("This is a test!"));




答案 2 :(得分:0)

< p>以更简单的方式......< / p> < p>< div class =“snippet”data-lang =“js”data-hide =“false”data-console =“true”data-babel =“false”> < div class =“snippet-code”> < pre class =“snippet-code-js lang-js prettyprint-override”>< code> a =“这是一个测试” b = a.split('') counter = 0 c = b.map(function(c){   if(c ==='')返回c   if((counter%2)=== 0){     计数器++     return c.toUpperCase()   }   计数器++   return c.toLowerCase() }) 的console.log(c.join( ''))≤; /代码>< /预> < / DIV> < / DIV> < / p为H.

答案 3 :(得分:0)

我认为这段代码可以简化很多。

var weirdCase = function(str){
    var upper = false;
    for (var i = 0; i < str.length; i++){
        if (str[i] != ' '){
            if (upper){
                str[i] = character.toUpperCase();
            }else{
                str[i] = character.toLowerCase();
            }
            upper = !upper;
     }
}

答案 4 :(得分:0)

我会这样做;

var str = "this is a test",
 result = str.split(" ")
             .map(s => [].reduce
                         .call(s, (p,c,i) => p += i & 1 ? c.toLowerCase()
                                                        : c.toUpperCase(),""))
             .join(" ");
console.log(result);

答案 5 :(得分:0)

var string= 'Stackoverflow';
for (var i=0; i<string.length; i+=2)
  string= string.substr(0,i) + string[i].toUpperCase() + string.substr(i+1);

Nev mid,刮开这个:我需要仔细阅读,抱歉。