首页 > 解决方案 > 如何对一个数组进行排序,该数组的元素为表示金额的字符串,其符号如 62B 和 51M ?我需要对这笔钱进行排序

问题描述

我在网上搜索但无法找到解决方案。请帮忙。

假设我的数组是:

['633.7B', '527M', 2.1B', '25K', '60M', '32B', '85k', '147.2M']

它应该以升序产生输出

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

标签: javascriptarrayssorting

解决方案


尝试以下操作:

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)

理解步骤:

  • 首先,我们在数字及其相关值之间创建了一个简单的关系
  • ''然后我们用正则表达式对数组进行排序,用(empty)替换不是数字或点的所有内容
  • 然后我们将这个提取的数字乘以其对应的数字(百万、万亿或十亿)
  • 就是这样,只需一个一个相减,你的数组就会正确排序

推荐阅读