Javascript 如何使用诸如'&';在洛达斯?

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

我正在使用Lodash将类似
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空格,但这没有反映在问题中)。不管怎样,答案对你有用吗?