最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Applying Math.min() to an empty list produces -Infinity instead of 0 - Stack Overflow

programmeradmin3浏览0评论

I have developed a code in which adds values and at the end subtracts the smallest value based on the items you select in a form. The code works fine however the problem occurs when you unselect all the items and instead of displaying 0, it displays -Infinity. What do I do to this script to force it to display 0 instead of -Infinity?

// All selected prices are stored on a array
var prices = [];

// A function to remove a item from an array
function remove(array, item) {
    for (var i = 0, len = array.length; i < len; i++) {
        if (array[i] == item) {
            array.splice(i, 1);
            return true;
        }
    }
    return false;
}

function calculateSectedDues(checkbox, amount) {
    // We add or remove the price as necesary

    if (checkbox.checked) {
        prices.push(amount);
    } else {
        remove(prices, amount);
    }

    // We sum all the prices
    var total = 0;
    for (var i = 0, len = prices.length; i < len; i++)
        total += prices[i];

    // We get the lower one
    var min = Math.min.apply(Math, prices);

    // And substract it
    total -= min;

    // Please, don't access the DOM elements this way, use document.getElementById instead
    document.grad_enroll_form.total.value = total;

}


</script>

I have developed a code in which adds values and at the end subtracts the smallest value based on the items you select in a form. The code works fine however the problem occurs when you unselect all the items and instead of displaying 0, it displays -Infinity. What do I do to this script to force it to display 0 instead of -Infinity?

// All selected prices are stored on a array
var prices = [];

// A function to remove a item from an array
function remove(array, item) {
    for (var i = 0, len = array.length; i < len; i++) {
        if (array[i] == item) {
            array.splice(i, 1);
            return true;
        }
    }
    return false;
}

function calculateSectedDues(checkbox, amount) {
    // We add or remove the price as necesary

    if (checkbox.checked) {
        prices.push(amount);
    } else {
        remove(prices, amount);
    }

    // We sum all the prices
    var total = 0;
    for (var i = 0, len = prices.length; i < len; i++)
        total += prices[i];

    // We get the lower one
    var min = Math.min.apply(Math, prices);

    // And substract it
    total -= min;

    // Please, don't access the DOM elements this way, use document.getElementById instead
    document.grad_enroll_form.total.value = total;

}


</script>
Share Improve this question edited Apr 16, 2013 at 20:34 Jeremy Banks 130k88 gold badges358 silver badges381 bronze badges asked Apr 16, 2013 at 20:32 user2288120user2288120 0
Add a ment  | 

1 Answer 1

Reset to default 6

Math.min() with no arguments returns Infinity, which is what happens when you call Math.min.apply(Math, prices) with an empty prices array.

Why not just detect the presence of an Infinity minimum and reset it to zero?

// We get the lower one
var min = Math.min.apply(Math, prices);

// ** test for Infinity **
if(min == Infinity) { min = 0; }

// And substract it
total -= min;

Or make sure prices has at least one element:

// fill the empty array with a zero
if(prices.length == 0) prices.push(0);

// We get the lower one
var min = Math.min.apply(Math, prices);
发布评论

评论列表(0)

  1. 暂无评论