Lodash标题案例(每个单词的大写第一个字母)

时间:2016-06-28 19:08:48

标签: javascript lodash

我正在浏览lodash文档和其他Stack Overflow问题 - 虽然有are several native JavaScript ways of accomplishing this task,有没有办法可以使用纯粹的 lodash函数将字符串转换为标题大小写(或者至少是现有的原型功能)这样我就不必使用正则表达式或定义新函数了?

e.g。

This string ShouLD be ALL in title CASe

应该成为

This String Should Be All In Title Case

14 个答案:

答案 0 :(得分:123)

这可以通过startCase的小修改来完成:

_.startCase(_.toLower(str));

console.log(_.startCase(_.toLower("This string ShouLD be ALL in title CASe")));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>

答案 1 :(得分:27)

_.startCase(_.camelCase(str))

对于非用户生成的文本,这会处理比接受的答案更多的案例

> startCase(camelCase('myString'))
'My String'
> startCase(camelCase('my_string'))
'My String'
> startCase(camelCase('MY_STRING'))
'My String'
> startCase(camelCase('my string'))
'My String'
> startCase(camelCase('My string'))
'My String'

答案 2 :(得分:15)

使用lodash版本4。

_.upperFirst(_.toLower(str))

答案 3 :(得分:13)

'This string ShouLD be ALL in title CASe'
  .split(' ')
  .map(_.capitalize)
  .join(' ');

答案 4 :(得分:3)

这是一种使用ONLY lodash方法而不使用内置方法的方法:

_.reduce(_.map(_.split("Hello everyOne IN the WOrld", " "), _.capitalize), (a, b) => a + " " + b)

答案 5 :(得分:3)

这个问题的答案不一。 有些建议使用<input type="hidden" name="beautician<?php echo $data[0]; ?>[]" id="beautician"> <select name="beautician[<?php echo $data[0]; ?>]" id="beauty" onchange="pvalue()"> <option value="null">Select</option> <?php $query = "select id,title from beautician order by id"; $run = mysql_query($query); while ($row = mysql_fetch_array($run)) { $id = $row[0]; $name = $row[1]; ?> <option value="<?php echo $id; ?>"> <?php echo $name; ?> </option> <?php } ?> </select> ,而有些建议使用_.upperFirst

了解它们之间的区别。

i)_.startCase将转换字符串的第一个字母,然后字符串可能是一个单词或多个单词,但字符串的唯一第一个字母将转换为大写。

_.upperFirst

输出:

_.upperFirst('jon doe')

查看文档https://lodash.com/docs/4.17.10#upperFirst

ii)Jon doe将转换字符串中每个单词的首字母。

_.startCase

输出:

_.startCase('jon doe')

https://lodash.com/docs/4.17.10#startCase

答案 6 :(得分:2)

这是在我自己的用例中测试的最干净、最灵活的实现。

import { capitalize, map } from "lodash";

const titleCase = (str) => map(str.split(" "), capitalize).join(" ");

// titleCase("ALFRED NÚÑEZ") => "Alfred Núñez"
// titleCase("alfred núñez") => "Alfred Núñez"
// titleCase("AlFReD nÚñEZ") => "Alfred Núñez"
// titleCase("-") => "-"

答案 7 :(得分:0)

 var s = 'This string ShouLD be ALL in title CASe';
 _.map(s.split(' '), (w) => _.capitalize(w.toLowerCase())).join(' ')

除非我错过了,否则lodash没有自己的大/小写方法。

答案 8 :(得分:0)

不像@ 4castle的回答那么简洁,但是描述性和充实性,尽管如此......

&#13;
&#13;
p = subprocess.Popen(cmd.split(' '), env=os.environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    while(True):
      log.info(p.stdout.readline())
      if(p.poll() is not None):
        break
&#13;
var basicTitleCase = _
    .chain('This string ShouLD be ALL in title CASe')
    .toLower()
    .words()
    .map(_.capitalize)
    .join(' ')
    .value()

console.log('Result:', basicTitleCase)
console.log('Exact Match:' , basicTitleCase === 'This String Should Be All In Title Case')
&#13;
&#13;
&#13;

答案 9 :(得分:0)

这是我的用例的另一个解决方案: &#34;魔鬼的骨干&#34;

简单地:

function titleCase (str) {
  return _.map(str.split(' '), _.upperFirst).join(' ');
}

使用startCase会删除撇号,所以我不得不解决这个限制。其他解决方案似乎相当复杂。我喜欢这个,因为它干净,易于理解。

答案 10 :(得分:0)

下面的代码可以正常工作:

var str =“ TITLECASE”; _.startCase(str.toLowerCase());

答案 11 :(得分:0)

const titleCase = str =>
  str
    .split(' ')
    .map(str => {
      const word = str.toLowerCase()
      return word.charAt(0).toUpperCase() + word.slice(1)
    })
    .join(' ')

您还可以分解地图功能来分隔单词

答案 12 :(得分:0)

这只能用lodash完成

properCase = string =>
        words(string)
            .map(capitalize)
            .join(' ');

const proper = properCase('make this sentence propercase');

console.log(proper);
//would return 'Make This Sentence Propercase'

答案 13 :(得分:-3)

使用lodash 4,您可以使用_.capitalize()

_.capitalize('JOHN') 它返回'John'

有关详细信息,请参阅https://lodash.com/docs/4.17.5#capitalize