如何将字符串中每个单词的最后一个字母大写

5

我对JavaScript还比较新,我有一个问题,就是想把数组中第一个字符变成大写。

我已经把所有的文本变成了小写,并且逐个反转了文本中的字符,最后把它们组成一个字符串。现在,我需要把字符串的第一个字母变成大写。

function yay () {
  var input = "Party like its 2015";

  return input.toLowerCase().split("").reverse().join("").split(" ");
  for(var i = 1 ; i < input.length ; i++){
    input[i] = input[i].charAt(0).toUpperCase() + input[i].substr(1);
  }   
}

console.log(yay());

我需要输出为 "partY likE itS 2015"。

2
你是否意识到在return语句之后,你的函数中没有代码会被执行吗?期望的输出是什么? - jfriend00
你的函数里有一个循环,但是在那之前的那一行你就已经返回了,所以它从来没有运行过。 - Octopus
4
你想要生成什么样的输出? - Amit
你展示的代码中没有任何数组。 - Elliot Bonneville
1
“Party Like Its 2015” - 这是您想要的输出吗? - sinisake
我认为你想要 input = xxx,而不是 return xxx - Barmar
8个回答

4

很遗憾,您在发布初始问题时没有披露所需的结果,这导致了许多混乱。现在,最终的期望结果已经清晰明确 - 这里提供一个答案。

您可以将整个字符串转换为小写字母,然后拆分成单词,通过将每个单词数组中的最后一个字符大写来重建每个单词,然后重新组合数组:

function endCaseWords(input) {
    return input.toLowerCase().split(" ").map(function(item) {
        return item.slice(0, -1) + item.slice(-1).toUpperCase();
    }).join(" ");
}

document.write(endCaseWords("Party like its 2015"));

以下是逐步说明:
  1. 将整个字符串转换为小写
  2. 使用 .split(" ") 将其分割为单词数组
  3. 使用 .map() 迭代数组
  4. 对于每个单词,创建一个新单词,该单词是添加到单词中的最后一个字符的大写版本的第一部分
  5. .join(" ") 将其重新组合成单个字符串
  6. 返回结果

您也可以使用自定义回调的正则表达式替换:

function endCaseWords(input) {
    return input.toLowerCase().replace(/.\b/g, function(match) {
      return match.toUpperCase();
    });
}

document.write(endCaseWords("Party like its 2015"));

请注意,原始代码中有很多问题。其中最大的错误是,在函数中一旦使用return,那么该函数中的其他代码都不会执行,因此您的for循环未被执行。

其次,并没有必要需要将字符reverse(),因为一旦您拆分成单词,就可以直接访问每个单词的最后一个字符。


3
您可以使用正则表达式进行匹配:
input.toLowerCase().replace(/[a-z]\b/g, function (c) { return c.toUpperCase() });

或者,如果您可以使用箭头函数,只需:

input.toLowerCase().replace(/[a-z]\b/g, c => c.toUpperCase())

好的解决方案。虽然我们都误解了问题。 - Dave

3
不要返回拆分和反转字符串的结果,而是需要将其分配给input。否则,在大写单词的循环之前就从函数中返回了。 然后在for循环之后,您应该返回已连接的字符串。
另外,由于在大写化之前已经反转了字符串,因此您应该大写化每个单词的最后一个字母。然后,在重新连接之前需要反转数组,以恢复原始顺序中的单词。

function yay () {
  var input = "Party like its 2015";

  input = input.toLowerCase().split("").reverse().join("").split(" ");
  for(var i = 1 ; i < input.length ; i++){
    var len = input[i].length-1;
    input[i] = input[i].substring(0, len) + input[i].substr(len).toUpperCase();
  }
  return input.reverse().join(" ");
}

alert(yay());


@dave 这个问题要求逐个字符地反转文本。 - Barmar
@dave 如果我表达不够清晰,我很抱歉。我向你道歉,并将来尽量更具体明确。 - vpope

1
这是我会做的事情:
  1. 在空格字符上拆分句子
  2. 使用.map转换结果数组,将第一个字符大写并将其余字符小写
  3. 再次使用空格连接数组以获取字符串

function yay () {
  var input = "Party like its 2015";
  return input.split(" ").map(function(item) {
    return item.charAt(0).toUpperCase() + item.slice(1).toLowerCase();
  }).join(" ");
}

console.log(yay());


0


function yay(str)
{
let arr = str.split(' ');
let farr = arr.map((item) =>{
  let x = item.split('');
  let len = x.length-1
  x[len] = x[len].toUpperCase();
  x= x.join('')
  return x;
})
return farr.join(' ')

}


var str = "Party like its 2015";
let output = yay(str);

console.log(output) /// "PartY likE itS 2015"


0

尝试使用 PHP.js 中的 ucwords。实际上很简单。

String.prototype.ucwords = function() {
    return (this + '')
        .replace(/^([a-z\u00E0-\u00FC])|\s+([a-z\u00E0-\u00FC])/g, function($1) {
        return $1.toUpperCase();
    });
}

var input = "Party like its 2015";
input = input.charAt(0).toLowerCase() + input.substr(1);
input = input.split('').reverse().join('').ucwords();
input = input.split('').reverse().join('');

注意:我修改了他们的函数,使其成为一个字符串函数,以便方法链接可以正常工作。

0

一些丑陋但可用的代码:

 var text = "Party like its 2015";
  //partY likE itS 2015
  function yay(input) {

    input = input.split(' ');

    arr = [];

    for (i = 0; i < input.length; i++) {
      new_inp = input[i].charAt(0).toLowerCase() + input[i].substring(1, input[i].length - 1) + input[i].charAt(input[i].length - 1).toUpperCase();
      arr.push(new_inp);
    }

    str = arr.join(' ');
    return str;

  }

  console.log(yay(text));


0
你可以将数组拆分,然后映射到大写逻辑上,并通过连接字符串返回。

let string = "Party like its 2015";

const yay = (string) => {
    let lastCharUpperCase = string.split(" ").map((elem) => {
         elem = elem.toLowerCase();
        return elem.replace(elem[elem.length - 1], elem[elem.length - 1].toUpperCase())
    })
    return lastCharUpperCase.join(" ");
}

console.log(yay(string))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接