Преобразовать массив строк (из prompt) в массив чисел

705
07 июня 2017, 05:45

Добрый день. Только начинаю учить javascript и столкнулась с такой проблемой. Стоит задача: найти максимальное число, введенное пользователем. Числа запрашиваю через prompt(). Если вводить однозначные числа, то всё работает. Но, мне необходимо, чтобы была возможность ввода любых целых чисел. Для решения этой проблемы я воспользовалась методом .split. Но теперь выводится только первое число, я так понимаю, из-за того, что цифры становятся строковыми значениями и поэтому не могут сравниться. Как их можно преобразовать числа? Код:

    var a = prompt('Введите числа через запятую').split(',');
    var max = a[0];
    for(i = a; i < a; i++){
        if (a[i] > max) {max = a[i]}
    }
    document.write('Максимальное число, которое вы ввели: ' + max);
Answer 1

Для начала вы допустили две ошибки в условии цикла -

for(i = a; i < a; i++){

a это массив, ([] < []) === false, поэтому у вас тело цикла выполняется только один раз.

Есть ряд способов превратить строку в число в javascript.

  • Самый короткий - унарный плюс:

var a = ('-13, 23423, .23423, 14.88, 22e8, 3*5,не число,,0x34').split(','); 
var max = +a[0]; 
for(var i = 0; i < a.length; i++){ 
    a[i] = +a[i]; 
    if(a[i] > max){max = a[i]} 
} 
document.write('Максимальное число, которое вы ввели: ' + max);

let numbers = ('-13, 23423, .23423, 14.88, 22e8, 3*5,не число,,0x34').split(','); 
console.log(numbers.map(string => +string));

  • Встроенные функции parseInt и parseFloat:

let numbers = ('-13, 23423, .23423, 14.88, 22e8, 3*5,не число,,0x34').split(','); 
console.log(numbers.map(string => parseInt(string)));

let numbers = ('-13, 23423, .23423, 14.88, 22e8, 3*5,не число,,34').split(','); 
console.log(numbers.map(string => parseFloat(string)));

  • Приведение к нужному типу помощью какого-нибудь выражения:

let numbers = ('-13,23423,.23423,14.88,22e8,3*5,534,2,2445,45645,не число,,0x34').split(','); 
console.log(numbers.map(string => string*1)); 
console.log(numbers.map(string => string/1)); 
console.log(numbers.map(string => string**1)); 
console.log(numbers.map(string => string%++string));// за такое бьют 
console.log(numbers.map(string => string-0)); 
// одно исключение - число и строка складываются как строки 
console.log(numbers.map(string => string+0));

  • Конструктор Number:

let numbers = ('-13,23423,.23423,14.88,22e8,3*5,534,2,2445,45645,не число,,0x34').split(','); 
console.log(numbers.map(string => (new Number(string)))); 
// Здесь вы увидите в консоли объекты

Answer 2

let justDoIt = true, 
    number   = null, 
    nums     = []; 
 
do{ 
  let num = prompt("Введите число:"); 
   
  if(num === null || num.trim() === ''){ // null - отмена ввода и пустая строка приводят к выходу из цикла 
    justDoIt = false; 
  }else if((num = parseFloat(num)) && !isNaN(num)){ // parseFloat приводит к числу строку (в данном случае лучше, чем parseInt, ибо может распарсить и дробное число) 
    if(number === null || num > number) number = num; // Если ещё нет максимального числа или новое больше - пишем его 
     
    nums.push(num); // Для наглядности: сохраняем введённые числа 
  } 
}while(justDoIt); 
 
if(nums.length > 0){ 
  console.info(`Вы ввели ряд чисел: ${nums.join(', ')}`); 
  console.info(`Самое большое число, введённое Вами: ${number}`); 
}else{ 
  console.info('Вы не ввели чисел!'); 
}

READ ALSO
Обработка click на Apple девайсах

Обработка click на Apple девайсах

Всем привет! Вообщем простой гамбургер, но делаю первый раз не судите строго)Все норм везде кроме устройств Apple

378
Как получить практические навыки в JavaScript? [требует правки]

Как получить практические навыки в JavaScript? [требует правки]

Скажите как развить практические навыки именно в JavaScript? Теоретические знания я получил а как получить практические навыки в JavaScript, что бы чувствовать...

296
Переменная больше одного значения и меньше другого

Переменная больше одного значения и меньше другого

доброго всем! Хочу if реализовать в одной строке переменная больше одного значения и меньше другого, примерно так:

403
Проверка формы обратной связи

Проверка формы обратной связи

Знатоки JS у меня к Вам вопрос, нашел исходник проверки формы обратной связи, решил добавить своё значение в него, но что-то пошло не так, ошибка

303