Задать вопрос

Вместо отрицательного числа в массиве получаю NaN.Как исправить?

Здравствуйте.Застрял на задаче по js.
In this little assignment you are given a string of space separated numbers, and have to return the highest and lowest number.
Examples
highAndLow("1 2 3 4 5"); // return "5 1"
highAndLow("1 2 -3 4 5"); // return "5 -3"
highAndLow("1 9 3 4 -5"); // return "9 -5"

Мой вариант решения(кривой-косой, но да ладно):
function highAndLow(numbers){
  if (typeof(numbers) != 'undefined' && numbers != null)  {
  let ArrNumbers1 = [numbers.replace(/\s/g, '')]; // чтобы убрать все пробелы
  let ArrNumbers2 = (""+ArrNumbers1).split("").map(Number); // отдельно получить []
  let res1 = [Math.max(...ArrNumbers2)];
  let res2 = [Math.min(...ArrNumbers2)];
  let res3 = [...res1, ...res2];
  let res4 = res3.toString('').replace(/(,)/gi, '');
  return res5 = (""+res4).split("").map(Number).toString('').replace(/(,)/gi, ' ');
  } else if (numbers ==undefined) {
    return res = undefined;
  } else if (numbers ==NaN) {
    return res = NaN;
  }
}

На 4 строчке кода возникает такая проблема: знак "-" заменяется на NaN(можно в любой IDE потестить), впринципе логично...Но мне же нужно получить массив с целочисленными цифрами(в том числе и с отрицательными).Как решить эту проблему?Подскажите пожалуйста.
  • Вопрос задан
  • 110 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
otdameskapizm
@otdameskapizm
Помог ответ? Отметь решением...
Попробуйте так:
const highAndLow = (str) => {
  const nums = str.split(' ').map(((num) => +num));
  const min = Math.min(...nums);
  const max = Math.max(...nums);

  return `Max: ${max}, Min: ${min}`;
};
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Seasle
@Seasle Куратор тега JavaScript
Потому что Вы неверно работаете со своими данными.
1. Вместо разделения по пробелу, удаляете его.
2. Зачем-то всё оборачиваете в массивы.

const parsedNumbers = (numbers ?? '').split(/\s+/g).map((value) => parseInt(value));
if (parsedNumbers.length === 0) {
    return null;
}

const min = Math.min(...parsedNumbers);
const max = Math.max(...parsedNumbers);

return `${max} ${min}`;
Ответ написан
Комментировать
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
Не заменять пробелы, а сразу делать split по пробелу. Получим в массиве число вместе с минусом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы