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

How to ignore spaces in string indexes and start with a capital letter on each word in a sentence

本文关键字:单词 开头 句子 大写字母 字符串 何忽略 索引 空格      更新时间:2023-09-26

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

从索引0开始,我希望字母为大写,然后当索引为奇数时,如1、3、5等……我想将其更改为大写。

因此:

堆栈溢出应该是Stackoverflow,但我也想处理字符串,像这个这样的字符串

This is a test应为:ThIs A TeSt

但我的函数返回:ThIs iS A 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("");
}

我的问题可能有点误导,我想成为wEiRd Case,但同时也是单词中第一个大写字母,所以我做了这个:

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

希望这能帮助

您可以添加另一个变量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("");
}

应该像这样简单:

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

以更简单的方式。。。

a = "This is a test"
b = a.split('')
counter = 0
c = b.map(function(c) {
  if (c === ' ') return c
  if ((counter % 2) === 0) {
    counter++
    return c.toUpperCase()
  }
  counter++
  return c.toLowerCase()
})
console.log(c.join(''))

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

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;
     }
}

我会做如下操作;

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

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

千万别忘了:对不起,我需要更仔细地阅读。