JS сортировать массив со строками и номерами строк - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь отсортировать массив с пользовательскими значениями по его целочисленному значению. Вот мой массив:

[ 'a>46', 'a>86', 'h>78' ]

И желаемый вывод:

[ 'a>46', 'h>78', 'a>86' ]

Примечание: самое большое значение, которое можно найти в моем массиве, равно 90.

Я пытаюсь так:

  var newarr = [];
  var max = 91;
          for (let u = 0; u < array.length; u++) {
            var nmbr = parseInt(array[u].replace(/\D/g,'')); // get integer of array element

            if (nmbr < max) {       // if element is lower than current highest value
              max = nmbr;
              newarr[0] = array[u];  // assign it to the beggining of new array
            } else {   // else put it at as the next newarr element

              newarr[newarr.lenght+1] = array[u];
            }

          }

Выход:

[ 'a>46', <1 empty item>, 'a>86' ]

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Я бы порекомендовал использовать Array.prototype.sort().

var array = ["a>46", "h>78", "a>86"]
array.sort(function(a, b) {
  var number_a = parseInt(a.replace(/\D/g,''));
  var number_b = parseInt(b.replace(/\D/g,''));
  return number_a - number_b;
});

Выходы ["a>46", "h>78", "a>86"]


Если вы хотите узнать больше о том, как это на самом деле работает, я рекомендую ознакомиться с примером функции compare здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

В основном: если вы вернете ноль, то a и b равны. если вы возвращаете отрицательное число, это означает, что a меньше b. если вы вернете положительное число, это означает, что a больше b.

0 голосов
/ 29 августа 2018

Чтобы достичь ожидаемого результата, используйте нижеприведенную опцию использования функции сортировки массива

var array = [ 'a>46', 'a>86', 'h>78' ]


console.log(array.sort((a,b) => a.substring(2) - b.substring(2)));

https://codepen.io/nagasai/pen/eLdYKz?editors=1010

0 голосов
/ 29 августа 2018

JavaScript поставляется со встроенным методом сортировки массивов.

const array = [ 'a>46', 'a>86', 'h>78' ];

array.sort((a, b) => {
  a = Number.parseInt(a.replace(/\D/g, ''), 10);
  b = Number.parseInt(b.replace(/\D/g, ''), 10);
  return a - b;
});

console.log(array);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...