如何将字符串中单词中的所有第一个字母大写,但不包括 'by' 等某些情况?

How to capitalize all 1st alphabet in the words in a string excluding some cases like 'by'?

这就是我到目前为止所做的。我把所有单词的第一个字母都大写了。

预期输出:Dance by Cow

我收到的输出是:Dance By Cow

let capitalize = str => {
   return str
     .toLowerCase()
     .split('-')
     .map(s => s.charAt(0).toUpperCase() + s.substring(1))
     .join(' ');
};

toTitleCase('dance-by-cow');

我猜你是在正确的轨道上。也许一个好的解决方案是创建一个异常数组,其中包含您希望从将第一个字符转换为大写时跳过的特定单词。

请查找扩展解决方案:

const toTitleCase = (value) => {
  const exceptions = ['by']; // handling the specific words
  const handleMapping = s => exceptions.includes(s) ? s : s.charAt(0).toUpperCase() + s.substring(1);
  
  return value.toLowerCase()
    .split('-')
    .map(handleMapping)
    .join(' ');
}

console.log(toTitleCase('dance-by-cow'));

希望对您有所帮助!

这样的怎么样?

const stopwords = new Set (['by', 'with', 'to', 'from', 'and', 'the'])

然后...

.map(s => stopwords.has(s) ? s : s.charAt(0).toUpperCase() + s.substring(1))

在这个级别,它只是条件代码。但是,获得一组正确的停用词并非易事。

可以尝试使用,使用第二个参数来提供您的排除词,因为您没有在 post.

中指定任何其他词

function toTitleCase(input, exclusions = []) {
  return input
    .toLowerCase()
    .split('-')
    .map((word) => {
      return exclusions.includes(word) ? word : word.charAt(0).toUpperCase() + word.substring(1);
    })
    .join(' ');
}

let example = toTitleCase('dance-by-cow', ['by']);

console.log(example);