介绍
在前端开发中,经常会涉及到数字的处理,而且数字的格式有时候十分复杂。比如说,有一个字符串 3.5 million
,我们希望将它转化为数字 3500000。在这个情况下,我们就需要用到一个 npm 包—— numerizer。
numerizer 是一个 JavaScript 库,可以将一些表述数字的文本转化成数字。例如,将 "three hundred forty two" 转化成数字 342。
在本篇文章中,我会介绍如何安装、使用和基本的 API。
安装
你可以利用 npm 来安装 numerizer。
npm install numerizer
用法
引入
在 JavaScript 文件中,我们可以使用以下代码来引入 numerizer。
const numerizer = require('numerizer');
如果你是在 ES6 模块中使用 numerizer,可以这样引入。
import numerizer from 'numerizer';
基本使用
使用 numerizer 转化文本为数字很简单。以下是一些例子。
numerizer('twenty three'); // 23 numerizer('three hundred and forty-two'); // 342 numerizer('twenty thousand and twenty-one'); // 20021 numerizer('one hundred million'); // 100000000
可选参数
numerizer 还有一个可选的参数,可以指定是否忽略不识别的数字。当不指定这个可选参数时,如果出现无法识别的数字,numerizer 会返回 NaN。
numerizer('one hundred and forty two dollars and fifty cents'); // NaN numerizer('one hundred and forty two dollars and fifty cents', true); // 142.5
可以看到,在第二个例子中,指定了忽略不识别的数字的参数,这样 numerizer 会忽略掉 "dollars" 和 "cents",返回数字 142.5。
其他 API
numerizer 还提供了一些其他的 API,比如 reset()
,用于清空已经加载的数字映射。这个 API 一般情况下不需要使用。
numerizer.reset();
还有 addUnits(unitsObject)
,用于添加额外的数字映射。
numerizer.addUnits({'shika-tenth': 0.1}); numerizer('three shika-tenth'); // 0.3
深入了解
数字映射
在 numerizer 的设计中,有一个核心的数据结构——数字映射。数字映射将文本数字(例如 "twenty")与对应的数字值(例如 20)进行映射,因为同一个数字在不同语言或不同场景下可能有不同的表述。
这个映射是一个包含键值对的对象,其中键是文本数字,值是数字值。
{ 'zero': 0, 'one': 1, 'two': 2, // ... }
在 numerizer 中,数字映射被称为 "units"。内置了两个 "units",一个是包含了 0-19 的基本数字映射,另一个是包含了 "tens" 的映射。你也可以添加你自己的 "units"。
实现原理
如果你对 numerizer 的实现感兴趣,可以去 numerizer 的 GitHub 页面 查看源代码。大致思路就是将待转化的文本数字按照空格分割,然后逐个识别并映射。可以看到,这个库非常小巧且高效,适合各种场景。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5f070ef6403f2923b035bf8e