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,看看我下面更新的答案。太好了,非常感谢。