我目前正在使用FreeCodeCamp来尝试学习基本的JavaScript脚本。我目前正在处理的问题是:
https://github.com/neo4j/neo4j/issues/4893
问题涉及使用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}]);
问题不在于我的计算。相反,当我提交我的代码时,我得到:&#34;预期[{name:&#39; sputkin&#39;,avgAlt:86400}]深度相等[Array(1)]&#34;。有谁知道它为什么告诉我应该返回一个数组(1)?
答案 0 :(得分:3)
测试套件期望返回数组包含具有属性name
和orbitalPeriod
的对象 - 您的返回数组包含具有属性name
和{{1}的对象}}
附注,不要使用this
关键字,除非您确定它的作用 - 并且我保证您不会按照您的想法执行此操作。
这是解决方案,与您的解决方案进行比较。你的计算是正确的,在这方面做得很好。
avgAlt
额外注意:Math.round()
只接受一个参数。
奖金回答:
如果我们没有针对性能进行调整,那么 Array.prototype.map()
会让这个超级干净。
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}]);