javascript - 计算后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 的值,但被卡住了,有什么想法吗?
解决方案
首先,你使用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 或您想要的任何内容,您甚至可以抛出错误