javascript - 以数字字为参数的 parseInt 函数
问题描述
我需要一些帮助,我的代码适用于三位数字,我需要这个与七位数字一起使用。首先拆分输入,然后迭代并与数据库变量进行比较..我真的停留在这一点上。输入可能包含也可能不包含连字符。提前致谢。
function parseInt(string) {
var output = [];
var dataBase = {
'zero': 0,
'one': 1,
'two': 2,
'three': 3,
'four': 4,
'five': 5,
'six': 6,
'seven': 7,
'eight': 8,
'nine': 9,
'ten': 10,
'eleven': 11,
'twelve': 12,
'thirteen': 13,
'fourteen': 14,
'fifteen': 15,
'sixteen': 16,
'seventeen': 17,
'eighteen': 18,
'nineteen': 19,
'twenty': 20,
'thirty': 30,
'forty': 40,
'fifty': 50,
'sixty': 60,
'seventy': 70,
'eighty': 80,
'ninety': 90,
'hundred': 100,
'thousand': 1000,
'million': 1000000,
'and': 0
}
var arr = string.split(" ");
console.log(arr);
var length = arr.length;
for (i = 0; i < length; i++) {
if (arr[i].includes("-")) {
var index = arr.indexOf(arr[i]);
var hecta = arr[i].split('-');
arr.splice(index, 1, hecta[0], hecta[1]);
}
}
console.log(arr);
for (i = 0; i < arr.length; i++) {
output.push(dataBase[arr[i]]);
}
console.log(output);
var transform = 0;
transform = output[0] * output[1] + output[2] + output[3];
return transform;
}
console.log(parseInt('two hundred forty-six')); //246
console.log(parseInt("one hundred seventy-one")); //171
console.log(parseInt('one thousand two hundred and thirty')); // not works
解决方案
在阅读了mlibby的评论(以百万为单位的值)之后,我决定从头开始。
结果真的很简单!
我还添加了一个界面以更易读的方式显示结果
const dataBase =
{ zero: 0, one: 1, two: 2, three: 3, four: 4
, five: 5, six: 6, seven: 7, eight: 8, nine: 9, ten: 10
, eleven: 11, twelve: 12, thirteen: 13, fourteen: 14
, fifteen: 15, sixteen: 16, seventeen: 17, eighteen: 18
, nineteen: 19, twenty: 20, thirty: 30, forty: 40
, fifty: 50, sixty: 60, seventy: 70, eighty: 80, ninety: 90
, hundred: 100, thousand: 1000, million: 1000000, and: 0
}
const parseVal=s=>
s.match(/\w+/g)
.reduce((tots,sVal)=>
{
let n = tots.length -1
switch (sVal) {
case 'hundred':
tots[n] *= 100
break
case 'thousand':
case 'million':
tots[n] *= dataBase[sVal]
tots.push(0)
break
default:
tots[n] += dataBase[sVal]
break;
}
return tots
},[0]).reduce((a,c)=>a+c);
// testing part...
const myTable = document.getElementById('my-table')
for(let r=1;r<myTable.rows.length;++r )
{
let rowCell = myTable.rows[r].cells
rowCell[1].textContent = parseVal(rowCell[0].textContent).toLocaleString('en')
if (rowCell[1].textContent === rowCell[3].textContent)
{
rowCell[2].textContent = 'OK'
rowCell[2].className = 'isOK'
}
else
{
rowCell[2].textContent = 'bad'
rowCell[2].className = 'isBad'
}
}
table {
border-collapse: collapse;
margin-top: 25px;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
thead {
background-color: aquamarine;
}
tbody {
background-color: #e1e7ee;
}
td {
border: 1px solid grey;
padding: .3em .7em;
}
td:nth-child(2),
td:nth-child(4) {
text-align: right;
}
td:nth-child(3) { text-align: center; }
td.isOK { color:green }
td.isBad { color:red }
<table id="my-table">
<thead>
<tr>
<td>text value</td> <td>Parsed</td> <td>validation</td><td>expected</td>
</tr>
</thead>
<tbody>
<tr>
<td>two hundred forty-six</td>
<td>...</td>
<td>...</td>
<td>246</td>
</tr>
<tr>
<td>two hundred thousand</td>
<td>...</td>
<td>...</td>
<td>200,000</td>
</tr>
<tr>
<td>two hundred thousand and twelve</td>
<td>...</td>
<td>...</td>
<td>200,012</td>
</tr>
<tr>
<td>one hundred seventy-one</td>
<td>...</td>
<td>...</td>
<td>171</td>
</tr>
<tr>
<td>one thousand two hundred and thirty</td>
<td>...</td>
<td>...</td>
<td>1,230</td>
</tr>
<tr>
<td>three hundred and twenty one million four hundred thirty three thousand seven hundred and eight</td>
<td>...</td>
<td>...</td>
<td>321,433,708</td>
</tr>
</tbody>
</table>
推荐阅读
- android - 在 Android 7 Nougat Shell 中启动守护程序“未启用硬链接/软链接保护”时出现 Greengrass 错误
- reactjs - useContext 不在同一个渲染上更新
- scala - 使用 Gatling 对 SSO 登录 UI 应用程序进行性能测试
- paypal - Paypal - 从交易标识符中获取订单标识符
- spring - 代理重启时长 Spring 框架 JMS 客户端超时
- php - 没有javascript的$_POST之前和之后的CSS格式化PHP表单选择选项
- sql - SQL Server 查询包含更改历史的维度
- c++ - 当用户在 qtablewidget 中输入单元格时如何获取信号?C++
- django - 如何检查 Django 为多租户应用程序生成的 SQL 以确保过滤租户?
- javascript - 如何使用单击的 X 和 Y 坐标移动图像