曾经需要将字符串转换为驼峰命名法吗?我在探索开源 Supabase 存储库时发现了一个有趣的代码片段。他们使用的方法如下:
function featureToCamelCase(feature: Feature) { return feature .replace(/:/g, '\_') .split('\_') .map((word, index) => (index === 0 ? word : word\[0\].toUpperCase() word.slice(1))) .join('') as FeatureToCamelCase}
这个功能非常简洁。它将冒号替换为下划线,将字符串拆分为单词,然后映射每个单词以将其转换为驼峰命名法。第一个单词保持小写,后续单词的第一个字符大写,然后再重新连接在一起。简单又有效!
我在 Stack Overflow 上发现了另一种不使用正则表达式的方法。这是替代方案:
function toCamelCase(str) { return str.split(' ').map(function(word, index) { // If it is the first word make sure to lowercase all the chars. if (index == 0) { return word.toLowerCase(); } // If it is not the first word only upper case the first char and lowercase the rest. return word.charAt(0).toUpperCase() word.slice(1).toLowerCase(); }).join(''); }
来自 SO 的这段代码片段有注释解释了这段代码的作用,除了它不使用任何类型的正则表达式。 Supabase 将字符串转换为驼峰式的方式中找到的代码与此 SO 答案非常相似,除了注释和使用的正则表达式。
.replace(/:/g, '\_')
此方法用空格分割字符串,然后映射到每个单词。第一个单词完全小写,而后续单词的第一个字符大写,其余字符小写。最后,单词重新连接在一起形成驼峰式字符串。
Stack Overflow 用户的一条有趣评论提到了这种方法的性能优势:
“ 1 表示不使用正则表达式,即使问题要求使用正则表达式的解决方案。这是一个更清晰的解决方案,而且在性能方面也取得了明显的胜利(因为处理复杂的正则表达式比仅仅迭代一堆字符串并将它们连接在一起是一项更困难的任务)。请参阅 jsperf.com/camel-casing-regexp-or-character-manipulation/1 ,我在这里举了一些例子以及这个(还有我自己的谦虚的例子)改进它的性能,尽管在大多数情况下,为了清晰起见,我可能更喜欢这个版本)。”
两种方法都有其优点。 Supabase 代码中的正则表达式方法非常简洁,并且利用了强大的字符串操作技术。另一方面,非正则表达式方法因其清晰度和性能而受到称赞,因为它避免了与正则表达式相关的计算开销。
以下是您如何在它们之间进行选择:
想学习如何从头开始构建 shadcn-ui/ui 吗?查看 从头开始构建
网站:https://ramunarasinga.com/
Linkedin:https://www.linkedin.com/in/ramu-narasinga-189361128/
Github:https://github.com/Ramu-Narasinga
电子邮件:[email protected]
从头开始构建 shadcn-ui/ui
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3