невозможно сортировать элементы массива при вводе отрицательных чисел (js) - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь отсортировать элементы массива и написал эту функцию. Это работает, если я ввожу только положительные числа, но когда я ввожу отрицательные числа, это не так. Может ли кто-нибудь объяснить мне, что не так с моим кодом?

function highAndLow(numbers) {
  let sort;
  let result = '';
  let array = numbers.split(' ');
  sort = array.sort((a, b) => {
    if (a > b) {
      return 1;
    } else return -1;
  });
  result = sort[sort.length - 1] + ' ' + sort[0];
  console.log(sort);
  console.log(result);
}

highAndLow('3 4 6 8 2 3 5 6 1 0'); // sort: 0,1,2,3,3,4,5,6,6,8
highAndLow('99 8 7 6 5 3 8 9 0 0 1 9'); //sort: 0,0,1,3,5,6,7,8,8,9,9,99
highAndLow('-3 -4 1 9 8 -8 1 2 -11'); //sort: -11,-3,-4,-8,1,1,2,8,9

Ответы [ 3 ]

2 голосов
/ 05 августа 2020

Вы сортируете числа как строки, а не как числа.

Используйте parseInt для их преобразования.

function highAndLow(numbers) {
  let sort;
  let result = "";
  let array = numbers.split(" ").map(n => parseInt(n, 10));  // this map makes them numbers
  sort = array.sort((a, b) => {
    if (a > b) {
      return 1;
    } else return -1;
  });
  result = sort[sort.length - 1] + " " + sort[0];
  alert(sort);
  alert(result);
}
1 голос
/ 05 августа 2020

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

function highAndLow(numbers) {
    let array = numbers
        .split(' ')
        .sort((a, b) => a - b);

    console.log(array[array.length - 1] + ' ' + array[0]);
}

highAndLow('3 4 6 8 2 3 5 6 1 0'); // result: 0,1,2,3,3,4,5,6,6,8
highAndLow('99 8 7 6 5 3 8 9 0 0 1 9'); //result: 0,0,1,3,5,6,7,8,8,9,9,99
highAndLow('-3 -4 1 9 8 -8 1 2 -11'); //result: -11,-3,-4,-8,1,1,2,8,9
1 голос
/ 05 августа 2020

Вы можете использовать a - b в своей функции сортировки, чтобы строки преобразовывались в числа для сортировки.

function highAndLow(numbers) {
  let sort;
  let result = '';
  let array = numbers.split(' ');
  sort = array.sort((a, b) => a - b);
  result = sort[sort.length - 1] + ' ' + sort[0];
  console.log(...sort);
  console.log(result);
}

highAndLow('3 4 6 8 2 3 5 6 1 0');
highAndLow('99 8 7 6 5 3 8 9 0 0 1 9');
highAndLow('-3 -4 1 9 8 -8 1 2 -11');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...