首页 > 解决方案 > 在 JavaScript 中解析数字中的字母的函数

问题描述

我正在尝试构建一个价格转换器,它使用解析器,因为数字的格式可以不同。

假设我有一个这样的数组:

const prices = ["1300", "0.232", "12k2", "123.45", "14923", "1k2", "2k20", "1k300", "12k320", "8k23" ];

现在我为此做了一个函数,将它们变成这样的浮点数:

const makePriceFromString = (str) => {
  let _price = str.toLowerCase();
  if (_price.contains("k")) {
    _price = _price.replace("k", "");
    _price += "00";
  }
  return parseFloat(_price);
}

然后我像这样遍历它们:

const result = prices.map(price => makePriceFromString(price));
/*
[ 
  1300.00, 
  0.232,
  12200.00,
  123.45,
  14923.00,
  1200.00,
  22000.00, <- Should be 2200.00 
  130000.00, <- Should be 1300.00
  1232000.00, <- Should be 12320.00
  82300.00 <- Should be 8230.00
]

如您所见,最后两个价格失败了,因为“k”后面有多个数字。我坚持如何让我的功能解决这个问题

标签: javascript

解决方案


您可以'k'用点替换 并乘以1000。这对于像这样的值更有效

string   your app.   rpl. with dot
 1k2       1200          1200
 1k20     12000          1200

因为'k'不是在末尾添加一些零的位置。

const
    prices = ["1300", "0.232", "12k2", "123.45", "14923", "1k2", "1k20"],
    numbers = prices.map(s => s.includes('k') ? s.replace('k', '.') * 1000 : +s);

console.log(...numbers);


推荐阅读