Сортировать массив с числами - PullRequest
0 голосов
/ 29 июня 2018

Это массив, который у меня есть:

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

И вот что я хочу:

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

Я пытался использовать этот метод - Javascript: натуральный вид буквенно-цифровых строк но его сортировка по идентификатору (<@ 424507945156784498>), как я могу сортировать по стоимости денег?

Ответы [ 4 ]

0 голосов
/ 29 июня 2018

Просто извлеките значение цены и отсортируйте по нему:

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);
0 голосов
/ 29 июня 2018

Используется 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])
);
0 голосов
/ 29 июня 2018

Попробуйте следующее выражение:

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

Это выражение удаляет запятую, а затем соответствует номеру, за которым следует $. Это делается для х и у, используемых в методе сортировки.

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))
0 голосов
/ 29 июня 2018

Разделить и заменить - сортировка отсортирует существующий массив - если вам не нужно изменять его, вам нужно скопировать его в другой массив:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...