我目前正在使用 FreeCodeCamp 尝试学习基本的 JavaScript 脚本。我目前正在解决的问题是:
http://www.freecodecamp.com/challenges/bonfire-map-the-debris .
该问题涉及使用 OOP 来解决特定任务(计算给定高度的轨道周期)。
我的代码如下:
function orbitalPeriod(arr) {
var GM = 398600.4418;
var earthRadius = 6367.4447;
this.arr = arr;
for(var i = 0; i < arr.length; i++){
var altitude = this.arr[i]["avgAlt"] + earthRadius;
var calc = Math.round((2*Math.PI) * Math.sqrt(Math.pow(altitude,3) / GM),1);
this.arr[i]["avgAlt"] = calc;
}
return this.arr;
}
orbitalPeriod([{name : "sputkin", avgAlt : 35873.5553}]);
问题不在于我的计算。相反,当我提交代码时,我得到:“预期 [ { name: 'sputkin', avgAlt: 86400 } ] 深度等于 [ Array (1) ]”。有谁知道为什么它告诉我应该返回一个数组(1)?
最佳答案
测试套件期望返回数组包含具有属性 name
和 orbitalPeriod
的对象 - 您的返回数组包含具有属性 的对象名称
和avgAlt
。
旁注,请勿使用 this
关键字,除非您确定它的作用 - 我向您保证它不会做您认为它在这里做的事情。
这是解决方案,将其与您的进行比较。您的计算是正确的,这部分做得很好。
function orbitalPeriod(arr) {
var GM = 398600.4418,
earthRadius = 6367.4447,
output = [], altitude, calc;
for (var i = 0; i < arr.length; i++){
altitude = arr[i].avgAlt + earthRadius;
calc = Math.round((2*Math.PI) * Math.sqrt(Math.pow(altitude,3) / GM));
output.push({
name: arr[i].name,
orbitalPeriod: calc
});
}
return output;
}
orbitalPeriod([{name : "sputkin", avgAlt : 35873.5553}]);
奖金说明:Math.round()
仅采用一个参数。
奖励答案:
Array.prototype.map()
如果我们不针对性能进行调整,那么它会变得非常干净。
function orbitalPeriod(arr) {
var GM = 398600.4418,
earthRadius = 6367.4447;
return arr.map(function (o) {
return {
name: o.name,
orbitalPeriod: Math.round((2 * Math.PI) * Math.sqrt(Math.pow(o.avgAlt + earthRadius, 3) / GM))
};
});
}
orbitalPeriod([{name : "sputkin", avgAlt : 35873.5553}]);
关于javascript - 深度等于错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31040214/