字符串大写

Capitalizing a String

我知道 CSS 属性 text-transform: capitalize 但谁能帮助我使用 Javascript 复制它?

我想向我的函数传递一个参数,它将 return 每个单词的首字母大写的字符串。

我已经走到这一步了,但我一直在尝试将我的字符串数组分成块:

function upper(x){
  x = x.split(" "); 

  // this function should return chunks but when called I'm getting undefined
  Array.prototype.chunk = function ( n ) {
      return [ this.slice( 0, n ) ].concat( this.slice(n).chunk(n) );
  };

  x = x.chunk;

}

upper("chimpanzees like cigars")

在我猜的块之后,我需要再次将每个块拆分为第一个字符和其余字符,在第一个字符上使用 .toUpperCase(),将其与其余字符连接起来,然后加入再次将块组合成字符串?

有更简单的方法吗?

map 函数非常适合这个。

w[0].toUpperCase() : 用这个把每个单词的第一个字母大写

w.slice(1):Return从第二个字符开始的字符串

EDGE 案例

如果用户不输入字符串,map 函数将不起作用,并会引发错误。这可以通过检查用户是否实际输入内容来防止。

var userInput = prompt("Enter a string");

var capitalizedString = userInput == "" ? "Invalid String" :
 userInput.split(/\s+/).map(w => w[0].toUpperCase() + w.slice(1)).join(' ');

console.log(capitalizedString);

您可能想尝试正则表达式方法:

function upperCaseFirst(value) {
    var regex = /(\b[a-z](?!\s))/g;
    return value ? value.replace(regex, function (v) {
      return v.toUpperCase();
    }) : '';
}

这将获取句子中每个单词的首字母并将其大写,但如果您只想要句子的首字母,则只需删除正则表达式末尾的 g 修饰符宣言。

我为 单个 单词和 数组 单词想出了一个解决方案。它还将确保所有其他字母都是小写的。我也使用了 Airbnb 风格指南。希望对您有所帮助!

const mixedArr = ['foo', 'bAr', 'Bas', 'toTESmaGoaTs'];
const word = 'taMpa';

function capitalizeOne(str) {
  return str.charAt(0).toUpperCase().concat(str.slice(1).toLowerCase());
}


function capitalizeMany(args) {
  return args.map(e => {
    return e.charAt(0).toUpperCase().concat(e.slice(1).toLowerCase());
  });
};

const cappedSingle = capitalizeOne(word);
const cappedMany = capitalizeMany(mixedArr);

console.log(cappedSingle);
console.log(cappedMany);

您可以使用以下不使用正则表达式的解决方案。

function capitalize(str=''){
  return str.trim().split('')
    .map((char,i) => i === 0 ? char.toUpperCase() : char )
    .reduce((final,char)=> final += char, '' )
  }

capitalize(' hello')                     // Hello
"abcd efg ijk lmn".replace(/\b(.)/g, (m => m.toUpperCase())) // Abcd Efg Ijk Lmn

或者您可以只迭代字符串并完成工作:

function capitalize(lowerStr){
  var result = "";
  var isSpacePrevious = false;
  for (var i=0; i<lowerStr.length; i++){
      if (i== 0 || isSpacePrevious){
         result += lowerStr[i].toUpperCase();
         isSpacePrevious = false;
         continue;
      }
      if (lowerStr[i] === ' '){
          isSpacePrevious = true;
      }  
      result +=  lowerStr[i];
  }
  return result;
}