передача переменных min и max в другую функцию

#javascript #for-loop

Вопрос:

Я храню числа в массиве и нахожу минимальное и максимальное значение массива. проблема в том, что результат ненадежен. например, когда я сохраняю эти числа 15, 20, 5, 30, ожидаемый результат должен быть max:30 и min:5, но вместо этого результат max: 5 мин: 15. любая помощь будет признательна.

 var array = [];

function addNum() { 
    var num = document.getElementById("input").value;
    array.push(num);
    document.getElementById("input").value = null;
    document.getElementById("confirmation").innerHTML = "Num "   num   " has been entered.";
  document.getElementById("array").innerHTML = "array: "   array;
}

function clearArray() {
    array.splice(0, array.length); //empties array
}

function findMax(array) {
    var highest = array[0];
    for (var i = 0; i < array.length; i  ) {
        if (array[i] >= highest) {
            highest = array[i];
        }
    }
    return highest;
}
function findMin(array) {
    var lowest = array[0];
    for (var i = 0; i < array.length; i  ) {
        if (array[i] < lowest) {
            lowest = array[i];
        }
    }
    return lowest;
}
function findMinMax() {
  var max = findMax(array);
  var min = findMin(array);
  console.log("max: "   max);
  console.log("min: "   min);
} 
 <body>
    <div class="container">
        <input id="input" type="text" required="required" />
        <input id="submitbutton" type="button" value="Add" onClick="addNum();" />
        <input id="clearbutton" type="button" value="Clear" onClick="clearArray();" />
        <button onclick="findMinMax()">Find MinMax</button>
        <p id="array"></p>
        <p id="confirmation"></p>
        <div id="display">
            <p id="array"></p>
            <p id="lowest"></p>
            <p id="highest"></p>
        </div>
  </div>
</body> 

Комментарии:

1. Вы пропустили объявление параметра по адресу function findMinMax() { . Так и должно быть function findMinMax(array) { , хотя я бы посоветовал не использовать имена var, которые выглядят как объявление типа… Изменить: то же самое для addNum()

2. @Ant привет, спасибо за ответ. к сожалению, ваше предложение не сработало. он выдает ошибку «массив не определен».

Ответ №1:

ваш код в порядке, но вы сравниваете строки, а не целые числа ! поскольку вы получаете значение из входных данных , это строка и сравниваете код ascii символов, идущий слева направо, если один символ ascii больше, то вся строка больше, например "20" > "1000" , потому что 2 больше 1 в ascii ( 50 > 49 кодов ascii ) >проверьте этот mdn

 // the array you tried was 
array = ['15', '20', '5', '30']
min : 15 // 1 is the lowest
max : 5 // 5 is the highest
 

все, что вам нужно сделать, это проанализировать num его в int, прежде чем добавлять его в массив, и вот исправление :

 var array = [];

function addNum() { 
    var num = document.getElementById("input").value;
    array.push(parseInt(num));
    document.getElementById("input").value = null;
    document.getElementById("confirmation").innerHTML = "Num "   num   " has been entered.";
  document.getElementById("array").innerHTML = "array: "   array;
}

function clearArray() {
    array = []; //empties array
    document.getElementById("array").innerHTML = '';
}

function findMax(array) {
    var highest = array[0];
    for (var i = 0; i < array.length; i  ) {
        if (array[i] >= highest) {
            highest = array[i];
        }
    }
    return highest;
}
function findMin(array) {
    var lowest = array[0];
    for (var i = 0; i < array.length; i  ) {
        if (array[i] < lowest) {
            lowest = array[i];
        }
    }
    return lowest;
}
function findMinMax() {
  var max = findMax(array);
  var min = findMin(array);
  console.log("max: "   max);
  console.log("min: "   min);
} 
 <body>
    <div class="container">
        <input id="input" type="text" required="required" />
        <input id="submitbutton" type="button" value="Add" onClick="addNum();" />
        <input id="clearbutton" type="button" value="Clear" onClick="clearArray();" />
        <button onclick="findMinMax()">Find MinMax</button>
        <p id="array"></p>
        <p id="confirmation"></p>
        <div id="display">
            <p id="array"></p>
            <p id="lowest"></p>
            <p id="highest"></p>
        </div>
  </div>
</body>