javascript - 尝试练习如何处理数组

标签 javascript arrays function object

我正在自学 javascript,但看起来我遇到了障碍。作为练习,我正在尝试构建一个税收计算器。

这是我构建的一个包含税级的对象:

var taxBracket = [
{bracket: 1, from:0, to:18200, percentage :0, amount:0},
{bracket: 2, from:18201, to:37000, percentage :19, over:18200, amount:0},
{bracket: 3, from:37001, to:80000, percentage :32.5, over:37000, amount:3752},
{bracket: 4, from:80001, to:180000, percentage :37, over:80000, amount:17547},
{bracket: 5, from:180001, to:0, percentage :45, over:180000, amount:54547}];

这是循环遍历对象以查找 y 相应税级的函数

function returnTax (y){
    for(var x in taxBracket){
    if (y >= taxBracket[x].from && y <= taxBracket[x].to){
        var z = taxBracket[x].amount + ((grossIncome-taxBracket[x].over) * (taxBracket[x].percentage/100));
        return z;   
    }
};

问题是,如果 y 超过 180000,则会出错,因为 to 为 0。这是唯一的解决方案吗?else 语句重复 if 的功能陈述?感谢您的帮助!

最佳答案

到目前为止,进展顺利。只需使用 Infinity 而不是在最后一个括号上默认为 0 即可修复此问题。我也对您的语法提出了一些建议,希望对您有所帮助。

var taxBracket = [
    {bracket: 1, from: 0, to: 18200, percentage: 0, amount: 0},
    {bracket: 2, from: 18201, to: 37000, percentage: 19, over: 18200, amount: 0},
    {bracket: 3, from: 37001, to: 80000, percentage: 32.5, over: 37000, amount: 3752},
    {bracket: 4, from: 80001, to: 180000, percentage: 37, over: 80000, amount: 17547},

    // Use Infinity instead of 0 for the "to" value of bracket 5
    {bracket: 5, from: 180001, to: Infinity, percentage: 45, over: 180000, amount: 54547}
];

// Variable names like 'x', 'y' and 'z' can cause problems with code readability.
// Descriptive names such as "income", or even "string" or "int" will help you out when you come to review your code later!
function returnTax(y){

    // Using for..in with arrays can cause issues with enumerating over object properties.
    // You don't have to worry about it in this case, but a standard for loop (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for) is better practice.
    for(var x = 0; x < taxBracket.length; x++){

        if(y <= taxBracket[x].to){

            // I find breaking up long calculations into separate variables can make it
            // more readable. More preference than anything else though!
            var amountOver = grossIncome - taxBracket[x].over;
            var percent = taxBracket[x].percentage / 100;
            return taxBracket[x].amount + (amountOver * percent);

        }

    }

}

关于javascript - 尝试练习如何处理数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25588561/

相关文章:

java - 非常基本的东西 : having trouble with a program simulating a slot machine- enums and arrays

function - 调用一个函数 n 次 acl2

c++ - 关于 C++ 中模板上重载运算符的一些编译器错误

javascript - 打开和关闭菜单 jQuery

arrays - MATLAB:确定结构数组的总长度/大小,其中字段作为结构数组

javascript - 使用 ng-model-optios getterSetter 时无法输入无效的 View 值

python - 如何在 Flask-Jinja Python 中使用列表中的列表

javascript - 脚本开头的 "(function() {"的用途(仅限 GreaseMonkey?)

javascript - 如何获取 Nativescript 中复选框的值?

javascript - 如何将选中的复选框数据附加到html <div> 标签中的列表顶部?