用数字对数组排序

时间:2018-06-29 12:52:11

标签: javascript node.js sorting discord.js

这是我拥有的数组:

onClick

这就是我想要的:

onClick

我尝试使用此方法-Javascript : natural sort of alphanumerical strings 但是其按ID排序(<@ 424507945156784498>)我如何按货币值排序?

4 个答案:

答案 0 :(得分:1)

拆分并替换-排序将对现有数组进行排序-如果您不需要对其进行突变,则需要将其复制到另一个数组:

var myArray = [
  '<@424507945156784498> - 152,800$',
  '<@381223410610501732> - 100$',
  '<@224451506344606852> - 74,424$',
  '<@101441124537903160> - 65,100$'
];
function toNum(str) {
  return +str.split(" - ")[1]  // get the amount
    .replace(/[^\d]/g,"");     // remove all non-numeric
}
myArray.sort(function(a,b) {
  return toNum(b)-toNum(a);    // numeric sort in situ
});
console.log(myArray)

答案 1 :(得分:0)

使用map-sort-map习惯用法:

  1. 映射新数据以将其排序到现有元素上
  2. 按添加的数据排序
  3. 映射以删除按其排序的元素

var myArray = [
  '<@424507945156784498> - 152,800$',
  '<@381223410610501732> - 100$',
  '<@224451506344606852> - 74,424$',
  '<@101441124537903160> - 65,100$'
];
    
console.log(
  myArray.map(e => [e, e.split(' - ')[1].replace(/[^0-9]/g,'')])
         .sort((a, b) => b[1] - a[1])
         .map(e => e[0])
);

答案 2 :(得分:0)

尝试以下表达式:

myArray.sort((x,y)=>x.replace(/,/g,"").match(/(\d+)\$/)[1]*1 < y.replace(/,/g,"").match(/(\d+)\$/)[1]*1)

说明:

x.replace(/,/g,"").match(/(\d+)\$/)[1]*1

此表达式删除逗号,然后匹配数字后跟$。这是针对sort方法中使用的x和y完成的。

var myArray = [
  '<@424507945156784498> - 152,800$',
  '<@381223410610501732> - 100$',
  '<@224451506344606852> - 74,424$',
  '<@101441124537903160> - 65,100$'
];

console.log(myArray.sort((x,y)=>x.replace(/,/g,"").match(/(\d+)\$/)[1]*1 < y.replace(/,/g,"").match(/(\d+)\$/)[1]*1))

答案 3 :(得分:0)

简单地,提取价格值并按其排序:

var myArray = [
  '<@424507945156784498> - 152,800$',
  '<@381223410610501732> - 100$',
  '<@224451506344606852> - 74,424$',
  '<@101441124537903160> - 65,100$'
];

var result = myArray.sort((a,b) => {

  var [priceA, priceB] = [a,b].map(i => parseInt(i.split('-')[1].trim().replace(/\D/g,'')))

  return priceB - priceA;

});

console.log(result);