首页 > 解决方案 > 计算后Javascript响应中的未定义值

问题描述

我试图从我拥有的计算中返回一个值,但我得到一个未定义的值。这是我的代码。

var salaryScales = [{"age":18,"increase":0.135},
                {"age":19,"increase":0.135},
                {"age":20,"increase":0.135},
                {"age":21,"increase":0.126},
                {"age":22,"increase":0.117},
                {"age":23,"increase":0.108},
                {"age":24,"increase":0.099},
                {"age":25,"increase":0.090},
                {"age":26,"increase":0.083},
                {"age":27,"increase":0.076},
                {"age":28,"increase":0.069},
                {"age":29,"increase":0.062},
                {"age":30,"increase":0.055},
                {"age":31,"increase":0.050},
                {"age":32,"increase":0.045},
                {"age":33,"increase":0.043},
                {"age":34,"increase":0.041},
                {"age":35,"increase":0.039},
                {"age":36,"increase":0.037},
                {"age":37,"increase":0.035},
                {"age":38,"increase":0.033},
                {"age":39,"increase":0.031},
                {"age":40,"increase":0.029},
                {"age":41,"increase":0.027},
                {"age":42,"increase":0.025},
                {"age":43,"increase":0.023},
                {"age":44,"increase":0.021},
                {"age":45,"increase":0.019},
                {"age":46,"increase":0.017},
                {"age":47,"increase":0.015},
                {"age":48,"increase":0.015},
                {"age":49,"increase":0.015},
                {"age":50,"increase":0.015},
                {"age":51,"increase":0.015},
                {"age":52,"increase":0.015},
                {"age":53,"increase":0.015},
                {"age":54,"increase":0.015},
                {"age":55,"increase":0.015},
                {"age":56,"increase":0.015},
                {"age":57,"increase":0.015},
                {"age":58,"increase":0.015},
                {"age":59,"increase":0.015},
                {"age":60,"increase":0.015},
                {"age":61,"increase":0.015},
                {"age":62,"increase":0.015},
                {"age":63,"increase":0.015},
                {"age":64,"increase":0.015},
                {"age":65,"increase":0.015}];

function test() {
  var age = 35;
  var retAge = 65;
  var standard = 47;
  var inflation = 0.055;
  var returnPercentage = 0.04;
  var cumulativeInflation = 1 + inflation;
  var pensionableSalary = 0.73;
  var contributionPercentage = 0.15;
  var startFundCredit = 100000;
  var totalSalary = 360000;
  var endFundCredit = 0;
  var realFundCredit = 0;
  var list = [];



  for (var i = 0; i <= standard; i++) {
    var year = i;
    var ageIn = age;
    var yearsToRetirement = retAge - age;
    var contributions = totalSalary * pensionableSalary * contributionPercentage;
    endFundCredit = (startFundCredit * (1 + (returnPercentage + inflation))) + (contributions * Math.pow((1 + (returnPercentage + inflation)), 0.5));
    realFundCredit = endFundCredit / cumulativeInflation;

    list.push({
      'year': year,
      'age': age,
      'yearsToRetirement': yearsToRetirement,
      'cumulativeInflation': cumulativeInflation,
      'startFundCredit': startFundCredit,
      'totalSalary': totalSalary,
      'contributions': contributions,
      'endFundCredit': endFundCredit,
      'realFundCredit': realFundCredit
    });
    cumulativeInflation = cumulativeInflation * (1 + inflation);
    startFundCredit = endFundCredit;
    var salaryScale = getSalaryScale(ageIn);
    totalSalary = totalSalary * (1 + inflation + salaryScale); //salary scales
    age++;
  }
}


function getSalaryScale(ageIn) {
  var result = salaryScales.filter(function(item) {
    return item.age === ageIn
  });
  return result[0].increase;
}

test();

我正在尝试获取 result[0].increase 的值,但被卡住了,有什么想法吗?

标签: javascript

解决方案


首先,你使用ES6来获取薪水Scale 的想法很好,但问题是如果你传递一个数组中不存在的年龄,你会出错。

相反,我建议你使用Array.prototype.find这样的方法:

var salaryScales = [{"age":18,"increase":0.135},
                    {"age":19,"increase":0.135},
                    {"age":20,"increase":0.135}];

function getSalaryScale(ageIn){
  var result = salaryScales.find(item => item.age === ageIn);
  return result === undefined ? undefined : result.increase;
}

console.log(getSalaryScale(18)); // 0.135
console.log(getSalaryScale(12)); // undefined

或者,如果您不想返回 undefined 或您想要的任何内容,您甚至可以抛出错误


推荐阅读