你会怎么做:1234567=》1,234,567

原创 18672293959 随笔 js 220阅读 10 天前 举报

以下故事纯虚拟。雷同属巧合。
有一个题目经常出现。面试官问:如何进行数字格式化,如果我提供一个数字123456,你用什么办法转化为1,234,567。
额额额。。。这个问题的解答,可以可以。。。先检测一下数字的长度,然后将长度除以3,然后慢慢拼接字符串,达到目的。
面试官:好,你这个方法有道理,来,我给你一张纸,你能写下来么。
你:(心想)又遇到面试需让写代码的傻x。一脸大姨妈来了的不情愿,噗嗤噗嗤,就写下了如下的代码:

几下字写完了,一脸得意。面试官看后,不错,蛮简洁的。再问到,你会不会用正则表达式将这个问题再来研究一下。
此时的你皱起眉头,心想这个家伙真的是贪得无厌,绞尽脑汁,然后想到正则表达式中的正向肯定预查以及正向否定预查。
1.明显地,字符串'1234567',我们需要找到一个非单词边界'\B',后面只能跟着3个数字,第三个数字后面不能是数字;
2.此时可以利用String.prototype.replace方法进行替换非单词边界'\B'为一个非数字,至此可以解决问题
明白了这两个要点之后,其正则表达式如下:
/\B(?=(\d{3})+(?!\d))/g
其完整的函数为:

面试官露出了稍微满意的微笑,顺便给你说了一下正向预查不消耗字符的含义,并举了两个例子来说明,也算是装个x

忽然,灵光一闪,脑海里猛然飞过一个曾经似是而非,模模糊糊的概念,好像 也是可以解决数字格式化的问题,而且是相当的简单。
你说:稍等,我想到了一个更简洁的方法来解决这个问题
面试官面露疑惑(超出认知)的标签,然后示意你继续
你在纸上留下简单一行的代码:

就是这么简洁,自然,流畅。。。。
面试官面露微笑,长知识的那种满足感油然而生,写在脸上。
至此,面试通过,等待下一个级别更高的面试官。

附:toLocaleString,可以应用约数字以及日期的格式化,方便简洁,具体API详情请移步至 :
链接标题

链接标题

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复