Javascript 如何使用诸如'&';在洛达斯?
我正在使用Lodash将类似Javascript 如何使用诸如'&';在洛达斯?,javascript,lodash,Javascript,Lodash,我正在使用Lodash将类似DIGITAL&TECHNOLOGY的字符串格式化为DIGITAL&TECHNOLOGY。我已尝试使用以下代码: _.startCase(_.lowerCase('DIGITAL & TECHNOLOGY')); 但是,这会返回我的数字技术 这也不起作用: var words = _.words('DIGITAL & TECHNOLOGY', /[^ ]+/g); var newWords = ''; _.forEach(words, functio
DIGITAL&TECHNOLOGY
的字符串格式化为DIGITAL&TECHNOLOGY
。我已尝试使用以下代码:
_.startCase(_.lowerCase('DIGITAL & TECHNOLOGY'));
但是,这会返回我的数字技术
这也不起作用:
var words = _.words('DIGITAL & TECHNOLOGY', /[^ ]+/g);
var newWords = '';
_.forEach(words, function(w){
newWords += _.capitalize(w);
})
这将返回数字与技术
只有使用Lodash才能正确格式化这样的字符串,哪种方法合适?或者我必须混合使用Lodash和Javascript吗?首先要澄清,没有Javascript就没有Lodash
现在,问题已经解决了,请试穿这个尺码:
_.map(_.split('DIGITAL & TECHNOLOGY', /\s+/), _.capitalize).join(' ')
这会在任意大小的空格之间分割单词,将每个单词映射为大写,并将它们重新连接成一个字符串(您会注意到,仅在与符号上调用capitalize
是安全的)
编辑:我想看看是否可以通过将上面的语句转换成一个只包含lodash的函数来提高可重用性。以下是我的想法:
const split = _.partialRight(_.split, /\s+/)
, map = _.partialRight(_.map, _.capitalize)
, join = _.partialRight(_.join, ' ');
const mycapitalize = _.flow([split, map, join]);
mycapitalize('DIGITAL & TECHNOLOGY'); // => "Digital & Technology"
我喜欢这种方法,因为它在语义上列出了处理字符串所采取的步骤(即,首先拆分它,然后映射它,然后加入它)。这里是“一行”,如果你喜欢的话:
const mycapitalize = _.flow([
_.partialRight(_.split, /\s+/)
, _.partialRight(_.map, _.capitalize)
, _.partialRight(_.join, ' ')
]);
mycapitalize('DIGITAL & TECHNOLOGY'); // => "Digital & Technology"
只是想详细说明一下我在这里所做的:partiOK
有点像对bind
的特殊调用。它部分地应用函数(这基本上是说它返回带有硬编码参数之一的函数的一种方式)。传统上,partial
方法按顺序应用参数,因此partialine
按相反顺序应用参数(即,如果函数有两个参数,partial
将对第一个参数进行“硬编码”,而partialine
将对第二个/最后一个参数进行“硬编码”)。例如,\uuu.split
接受两个参数,依次是要拆分的字符串和要拆分的模式.partial(u.split,/\s+/)
提供了一个函数,该函数使用一个模式来拆分“foo-bar”
,而.partiOK(u.split,/\s+/)
提供了一个函数,该函数使用一个字符串来拆分/\s+//code>
我为过分的罗嗦道歉
此解决方案的另一部分是。.flow
。Flow基本上是对compose的lodash说法(尽管compose的大多数实现倾向于以相反的顺序应用函数;从右到左)<代码>\流
获取一个函数数组并返回一个函数,该函数按顺序应用该数组中的每个函数。例如,。.flow([add1,mult2])
将给您一个函数,将一个数字相加,然后将其乘以二并返回结果
在此上下文中,flow
接受我们用partiOK
创建的自定义操作,并将它们应用于它所获得的参数。在本例中,这意味着它获取一个字符串,在/\s+/
上拆分它,映射到。大写,然后按顺序在'
上联接
这可能是出于您的目的而过度设计的,但组合起来还是很有趣的。您可以使用\uu大写来大写第一个字符,然后使用正则表达式替换所有其他单词的第一个字母:
var result=..capitalize('DIGITAL&TECHNOLOGY').replace(/\s(\s)/g,函数(v){return v.toUpperCase();});
控制台日志(结果)代码>
将每个单词字符序列替换为大写版本:
var str='DIGITAL&TECHNOLOGY';
var result=str.replace(/\w+/g,大写);
控制台日志(结果)代码>
Lodash还有另一种方法toLower,它将字符串作为一个整体,而不是像lowerCase那样以空格分隔的单词
Lodash是Javascript,在第二个示例中,您正在阅读一些其他值;它应该产生数字和技术
,而不是数字和技术
(除非空格实际上不是U+0020空格,但这没有反映在问题中)。不管怎样,答案对你有用吗?