Функция выдает NAN вместо строки - PullRequest
1 голос
/ 28 июня 2019

Я новичок в JS, и у меня есть проблема с этой функцией: прежде всего я определил ее:

function highAndLow(numbers){
     numbers = numbers.replace(/ /g,",");
     let high = Math.max(numbers);
     let min = Math.min(numbers);
     console.log("The max value is "+high+ ", and the minimum is "+min);
};

и когда я ее вызываю:

console.log(highAndLow("1 2 3 4 5"));

я получаю следующий вывод:

The max value is NaN, and the minimum is NaN

Поэтому, пожалуйста, не могли бы вы показать, в чем проблема, и спасибо заранее.

Ответы [ 5 ]

1 голос
/ 28 июня 2019

Проблема в том, что Math.max ожидает коллекцию, и вы передаете строку, которая просто содержит числа. C Конвертируйте коллекцию в массив и передайте ее.

function highAndLow(numbers){
     numbers = numbers.replace(/ /g,",");
     var numbersList = numbers.split(",").map(function(num){
      return parseInt(num);
     });
     let high = Math.max(...numbersList);
     let min = Math.min(...numbersList);
     console.log("The max value is "+high+ ", and the minimum is "+min);
};

console.log(highAndLow("1 2 3 4 5"));
1 голос
/ 28 июня 2019
function highAndLow(numbers) {
     numbers = numbers.split(' ').map(n => +n);
     let high = Math.max(...numbers);
     let min = Math.min(...numbers);
     return "The max value is "+ high+ ", and the minimum is "+ min;
}

console.log(highAndLow("1 2 3 4 5"));
1 голос
/ 28 июня 2019

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

function highAndLow(numbers){
     numbers = numbers.split(" ");
     let high = Math.max(...numbers);
     let min = Math.min(...numbers);
     console.log("The max value is "+high+ ", and the minimum is "+min);
};


 highAndLow("1 2 3 4 5");
1 голос
/ 28 июня 2019

Я думаю, что главное недоразумение заключается в том, что:

 Math.max("1,2,3")

и

  Math.max(1, 2, 3)

равны (первое - это то, что вы делаете, второе - то, что вы хотите). Они не такие, как в первом случае вы передаете строку в Math.max, а во втором вы передаете несколько чисел. Чтобы превратить строку в массив чисел, вы можете сначала .split преобразовать ее в массив строк, а затем разобрать строки в числа. Этот массив затем может быть передан в качестве аргументов:

  Math.max(..."1 2 3".split(" ").map(Number))
1 голос
/ 28 июня 2019

Вы делаете три ошибки.

  • Вы используете replace() в строке. Который выведет строку. Вы не можете передать строку в Math.min/max. Вы должны использовать split() ' '
  • Даже если вы split(), элементы массивов будут строками. Вы можете преобразовать его в числа, используя map()
  • Math.min/max не ожидает массив в качестве аргумента. Если вы хотите передать массив, используйте Spread Operator

function highAndLow(numbers){
     numbers = numbers.split(' ').map(Number)
     let high = Math.max(...numbers);
     let min = Math.min(...numbers);
     console.log("The max value is "+high+ ", and the minimum is "+min);
};

console.log(highAndLow("1 2 3 4 5"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...