用户输入的简写形式呈现的字节数(例如“ kB”,“ MB”,“ GB”等)

托娃

我正在尝试构建从用户输入读取字节数并将其转换为带有后缀'kB','MB','GB'等的简写形式的组件。

因此,如果用户输入3456,则将其转换为3kB,将32456128转换为32MB,依此类推。

我的第一个尝试是使用以下形式的RegExp:

e.target.value.replace(/^(\d+)(\d{3})$/, (m,g0,g1) => g1 ? g0+'k' : m)

这种方法行之有效,但我立即面临几个问题:*难以扩展*难以舍入到最接近的整数(3586应该变成'4k',而不是'3k')

我的组件简化了:

import { useState } from 'react'
import { render } from 'react-dom'

const App = () => {
  const [num, setNum] = useState(''),
        onNumInput = e => { 
          const shortNum = e.target.value.replace(/^(\d+)(\d{3})$/, (m,g0,g1) => g1 ? g0+'k' : m)
          setNum(shortNum)
        }
  return (
    <div>
      <input type="number" onChange={onNumInput} />
      <div>{num}</div>
    </div>
  )
}

render (<App />, document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

如何解决上述问题以获得所需的功能?

叶夫根·戈本科夫(Yevgen Gorbunkov)

我建议采用Math方法来实现您的目标:

const { useState } = React,
      { render } = ReactDOM,
      rootNode = document.getElementById('root')

const App = () => {
  const [num, setNum] = useState(''),
        onNumInput = ({target:{value}}) => { 
          if(!value.length) setNum('')
          else {
            const suffixes = ['', 'kB', 'MB', 'GB', 'TB', 'PB'],
                  {min, log, round, pow} = Math,
                  power = min(0|log(value)/log(1024), suffixes.length-1),
                  base = round(value/pow(1024,power)),
                  suffix = suffixes[power]          
            setNum(`${base}${suffix}`)
          }
        }
  return (
    <div>
      <input type="number" onChange={onNumInput} />
      {!!num.length && <div>{num}</div>}
    </div>
  )
}

render (
  <App />,
  rootNode
)
<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script><script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script><div id="root"></div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

gb mb kb的数量和X字节中的字节数,java

来自分类Dev

解释Perl代码以显示以KB,MB,GB等为单位的字节数

来自分类Dev

如何使用公共函数从字节返回KB,MB和GB

来自分类Dev

如何快速将file.info()的大小元素从字节转换为KB,MB,GB等?

来自分类Dev

PowerShell将文件显示为KB,MB或GB

来自分类Dev

将数字转换为可读的KB / MB / GB / TB

来自分类Dev

以MB而不是KB的形式返回表的大小

来自分类Dev

以MB而不是KB的形式返回表的大小

来自分类Dev

使用以不同单位(KB,MB,GB)表示的值进行计算

来自分类Dev

在Windows批处理文件中获取KB / MB / GB的文件大小

来自分类Dev

如何以KB,MB,GB而不是K,M,G的格式打印人类可读的格式?

来自分类Dev

通过使用 ls -l 查找文件,AWK 命令以 mb、kb 或 gb 为单位打印大小

来自分类Dev

Qt-将int转换为文件大小格式(KB,MB或GB)的最简单方法?

来自分类Dev

我们如何以R为单位获取格式化的文件大小,以KB,MB,GB,TB为单位?

来自分类Dev

Excel:以 KB、MB、GB、TB 等為單位更改單位大小的動態公式...自動

来自分类Dev

128 MB与128 GB

来自分类Dev

Get file size in mb or kb

来自分类Dev

获取以mb或kb为单位的文件大小

来自分类Dev

在Java中将KB转换为MB

来自分类Dev

如何在Linux中以KB / MB /字节格式以及特定的端口或应用程序processID获取实时网络统计信息?

来自分类Dev

转换TB,Gb和MB excel

来自分类Dev

查询以将MB转换为GB值

来自分类Dev

Jqplot y轴值为KB / MB / TB / PB

来自分类Dev

如何使ps命令以mb代替kb显示内存?

来自分类Dev

在umbraco中获取上传文件字段的上传KB/MB值

来自分类Dev

字节数组不正确转换为MB

来自分类Dev

转换3GB文件成字节数组

来自分类Dev

Ubuntu仅使用768 MB而不是1 GB的ram

来自分类Dev

Windows仅看到768 MB RAM(4 GB)

Related 相关文章

  1. 1

    gb mb kb的数量和X字节中的字节数,java

  2. 2

    解释Perl代码以显示以KB,MB,GB等为单位的字节数

  3. 3

    如何使用公共函数从字节返回KB,MB和GB

  4. 4

    如何快速将file.info()的大小元素从字节转换为KB,MB,GB等?

  5. 5

    PowerShell将文件显示为KB,MB或GB

  6. 6

    将数字转换为可读的KB / MB / GB / TB

  7. 7

    以MB而不是KB的形式返回表的大小

  8. 8

    以MB而不是KB的形式返回表的大小

  9. 9

    使用以不同单位(KB,MB,GB)表示的值进行计算

  10. 10

    在Windows批处理文件中获取KB / MB / GB的文件大小

  11. 11

    如何以KB,MB,GB而不是K,M,G的格式打印人类可读的格式?

  12. 12

    通过使用 ls -l 查找文件,AWK 命令以 mb、kb 或 gb 为单位打印大小

  13. 13

    Qt-将int转换为文件大小格式(KB,MB或GB)的最简单方法?

  14. 14

    我们如何以R为单位获取格式化的文件大小,以KB,MB,GB,TB为单位?

  15. 15

    Excel:以 KB、MB、GB、TB 等為單位更改單位大小的動態公式...自動

  16. 16

    128 MB与128 GB

  17. 17

    Get file size in mb or kb

  18. 18

    获取以mb或kb为单位的文件大小

  19. 19

    在Java中将KB转换为MB

  20. 20

    如何在Linux中以KB / MB /字节格式以及特定的端口或应用程序processID获取实时网络统计信息?

  21. 21

    转换TB,Gb和MB excel

  22. 22

    查询以将MB转换为GB值

  23. 23

    Jqplot y轴值为KB / MB / TB / PB

  24. 24

    如何使ps命令以mb代替kb显示内存?

  25. 25

    在umbraco中获取上传文件字段的上传KB/MB值

  26. 26

    字节数组不正确转换为MB

  27. 27

    转换3GB文件成字节数组

  28. 28

    Ubuntu仅使用768 MB而不是1 GB的ram

  29. 29

    Windows仅看到768 MB RAM(4 GB)

热门标签

归档