JavaScript >> Javascript 文檔 >  >> JavaScript

JavaScript 羅馬數字轉換器

在短暫的互聯網中斷期間尋找快速做的事情時,我編寫了一些代碼來轉換羅馬數字。備份後,我搜索了等效代碼,但只找到了多頁長的東西,限制了它可以轉換的範圍,或者兩者兼而有之。我想我不妨分享一下我的想法:

function romanize (num) {
  if (!+num) return false;
  var digits = String(+num).split('');
  var key = ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM',
             '','X','XX','XXX','XL','L','LX','LXX','LXXX','XC',
             '','I','II','III','IV','V','VI','VII','VIII','IX'];
  var roman = '', i = 3;
  while (i--) roman = (key[+digits.pop() + (i * 10)] || '') + roman;
  return Array(+digits.join('') + 1).join('M') + roman;
}

function deromanize (str) {
  var str = str.toUpperCase();
  var validator = /^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/;
  var token = /[MDLV]|C[MD]?|X[CL]?|I[XV]?/g;
  var key = {M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1};
  var num = 0, m;
  if (!(str && validator.test(str))) return false;
  while (m = token.exec(str)) num += key[m[0]];
  return num;
}

你會怎麼做 重寫這段代碼?你能創建一個更短的版本嗎?


下一篇
Tutorial JavaScript 教程
  1. 如何將宏應用於谷歌電子表格的文件夾

  2. 輸出會是什麼

  3. mongoose、mongodb 中無法引用方法`db.start Session()`

  4. 延遲加載圖像的完整指南以獲得更好的網站性能

  5. 如何使用 Nuxt.js 和 Nexmo SMS API 發送和接收 SMS 消息

  6. 解決方案:強大的整數

  7. 如何從 cookie 創建和讀取值?

  1. 從您的網站輕鬆將認證添加到 LinkedIn。

  2. Node峰會上的NodeSource

  3. 在具有其他 id 的兩個 div 元素中有兩個具有相同 id 的元素是否正常?

  4. Firebase 權限被拒絕

  5. JavaScript:檢查變量是否為字符串

  6. 如何在您的網站中實施 sIFR3

  7. 有沒有辦法在 Nuxt.js 中安裝 v-cupertino 模塊?

  1. React 第 2 部分中的優化

  2. 使用 Next.js 將 WordPress 配置為無頭 CMS

  3. 使用貝寶註冊教程(3/3):設置您的真實貝寶商業賬戶

  4. Redis 中使用 node_redis 的 Lua 腳本