Javascript 我如何对一个数组进行排序,数组中的元素是表示货币数量的字符串,其符号为62B和51M?我需要把这笔钱分类

Javascript 我如何对一个数组进行排序,数组中的元素是表示货币数量的字符串,其符号为62B和51M?我需要把这笔钱分类,javascript,arrays,sorting,Javascript,Arrays,Sorting,我在线搜索,但找不到解决方案。请帮忙。 假设我的数组是: ['633.7B', '527M', 2.1B', '25K', '60M', '32B', '85k', '147.2M'] 它应该以升序方式产生输出,如下所示: ['25K', '85K', '60M', '147.2M', '527M', '2.1B', '32B', '633.7B'] 请尝试以下操作: const numberFormat = { 'K': 1000, 'M': 1000000, 'B': 100

我在线搜索,但找不到解决方案。请帮忙。

假设我的数组是:

['633.7B', '527M', 2.1B', '25K', '60M', '32B', '85k', '147.2M']
它应该以升序方式产生输出,如下所示:

['25K', '85K', '60M', '147.2M', '527M', '2.1B', '32B', '633.7B']
请尝试以下操作:

const numberFormat = {
  'K': 1000,
  'M': 1000000,
  'B': 1000000000
}

const oldArr = ['633.7B', '527M', '2.1B', '25K', '60M', '32B', '85K', '147.2M']

const newArr =
  oldArr
  .sort((a, b) =>
    a.replace(/[^\d\.]/g, '') * numberFormat[a.slice(-1)] - b.replace(/[^\d\.]/g, '') * numberFormat[b.slice(-1)]
  )

console.log('newArr', newArr)
理解的步骤:

  • 首先,我们在数字和它的相关值之间建立了一个简单的关系
  • 然后我们用正则表达式对数组进行排序,用
    '
    (空)替换所有不是数字或点的内容
  • 然后我们将这个提取的数字乘以相应的数字(百万、万亿或十亿)
  • 就这样,只需将一个减去另一个,就可以对数组进行正确排序
    • 想法如下:

    • 将数字的字符串数组转换为精确的数字
    • 在函数中比较两者之间的数字
    • 以下是工作示例:

      var编号=['633.7B','527M','2.1B','25K','60M','32B','85k','147.2M'];
      函数stringToNumber(s){
      var u=美国切片(-1);
      如果(u==“k”)
      返回s.slice(0,-1)*1000;
      否则,如果(u==“m”)
      返回s.slice(0,-1)*1000000;
      否则如果(u==“b”)
      返回s.slice(0,-1)*100000000;
      返回s;
      }
      数字。排序(函数(a,b){
      var n1=stringToNumber(a.toLowerCase());
      var n2=stringToNumber(b.toLowerCase());
      返回n1-n2;
      });
      
      console.log(…编号)
      在比较函数中,将两个字符串转换为数字并返回它们的比较结果。您在搜索中发现哪些不是解决方案?你自己试过什么?事实上,我在做一个加密货币跟踪器。我随身携带静态数据,这些数据显示在表中。表中有一列名为“Mkt Cap”,其中包含以十亿(B)和百万(M)为单位的市场价值。我想通过单击列标题使该列可排序。所以我有一个对象数组,我的解决方案是,但我的解决方案是错误的。请帮忙。@TarunSingh,看看我下面更新的答案。太好了,非常感谢。