Мне нужна помощь в сортировке конкретных чисел в массиве строк, чтобы спуститься - PullRequest
0 голосов
/ 03 июля 2019

У меня есть массив строк, которые мне нужны для сортировки этих строк на основе первых 4 чисел в каждой строке. Но как мне настроить эти числа для сортировки? Код работает нормально, мне просто нужно его отсортировать.

Я пробовал .substring, но я не думаю, что это правильный метод для этого.

var volunteers = [ '9.05', '16.29', '26.67', '0.00', '2.25' ]

getResults: function(volunteers) {
  this.results = [];
  for (var i = 0; i < volunteers.length; i++) {
    var dayNames = this.data[i][3] || " ";
    var result = (volunteers[i] + " additional volunteers are needed on day " + i +" " +dayNames);
    this.results.push(result);        
  }


console.log(this.results)
  return this.results;

}
//Expected
[ '26.67 additional volunteers are needed on day 2 Tuesday',
'16.29 additional volunteers are needed on day 1 Monday',
'9.05 additional volunteers are needed on day 0 Sunday',
'2.25 additional volunteers are needed on day 4 ',
'0.00 additional volunteers are needed on day 3 Wednesday' ]

//Actual
 [ '9.05 additional volunteers are needed on day 0 Sunday',
 '16.29 additional volunteers are needed on day 1 Monday',
 '26.67 additional volunteers are needed on day 2 Tuesday',
 '0.00 additional volunteers are needed on day 3 Wednesday',
 '2.25 additional volunteers are needed on day 4  ' ]

Ответы [ 5 ]

0 голосов
/ 03 июля 2019

parseFloat может использоваться для получения числовой части:

var arr = [ '9.05 additional volunteers are needed on day 0 Sunday',
           '16.29 additional volunteers are needed on day 1 Monday',
           '26.67 additional volunteers are needed on day 2 Tuesday',
            '0.00 additional volunteers are needed on day 3 Wednesday',
           '2.25 additional volunteers are needed on day 4' ]

console.log( arr.sort((a, b) => parseFloat(b) - parseFloat(a)) )
0 голосов
/ 03 июля 2019

Попробуйте это:

function getNumber(string) {
  const numbers = string.match(/[0-9\.]+/g)[0] || 0
  return Number(numbers);
}
function sort (volunteers) {
  return volunteers.sort((a, b) => getNumber(a) - getNumber(b));
}
sort(volunteers)
0 голосов
/ 03 июля 2019

Вы можете взять индексы и отсортировать их по убыванию значений и сопоставить строки с отсортированными индексами.

var volunteers = ['9.05', '16.29', '26.67', '0.00', '2.25'],
    days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    result = [...volunteers.keys()]
        .sort((a, b) => volunteers[b] - volunteers[a])
        .map(i => `${volunteers[i]} additional volunteers are needed on day ${i} ${days[i]}`);

console.log(result);
0 голосов
/ 03 июля 2019

var volunteers = [ '9.05', '16.29', '26.67', '0.00', '2.25' ];

var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];

this.results = [];
for (var i = 0; i < volunteers.length; i++) {
  var result = {
    'value':volunteers[i] , 
    'name' : volunteers[i] + " additional volunteers are needed on day " + i +" " +days[i]
  }
  this.results.push(result);
}

this.results.sort(function(a, b) {
  return a.value - b.value;
}).reverse();

var result = this.results.map(a => a.name);

console.log(result);
0 голосов
/ 03 июля 2019

Сначала отсортируйте их:

getResults: function(volunteers) {
  volunteers = volunteers.sort((a, b) => +a - +b);
  // Use sorted `volunteers` 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...