7.8 KiB
7.8 KiB
title | localeTitle |
---|---|
Map the Debris | 映射碎片 |
如果卡住,请记得使用**Read-Search-Ask
** 。尝试配对程序并编写自己的代码
问题说明:
首先要做的是通过了解轨道周期究竟是什么来熟悉程序的内容。你将返回一个新的数组,将该元素的平均高度转换为它们的轨道周期。通常很难找到的部分是找到公式,实现它,对某些人来说,通过键修改对象。但是,一些不太清楚的事实是你的程序必须能够检查数组中的任意数量的对象;这是在第二部分测试的内容。
相关链接
提示:1
所需的公式是:
现在尝试解决问题
提示:2
使用Math.round()
按要求向上舍入到下一个整数。使用Math.ceil()
将允许您通过第一个测试但是第二个测试失败。
现在尝试解决问题
提示:3
了解如何删除和添加JavaScript对象的密钥。
现在尝试解决问题
扰流警报!
提前解决!
基本代码解决方案
function orbitalPeriod(arr) {
var GM = 398600.4418;
var earthRadius = 6367.4447;
var a = 2 * Math.PI;
var newArr = [];
var getOrbPeriod = function(obj) {
var c = Math.pow(earthRadius + obj.avgAlt, 3);
var b = Math.sqrt(c / GM);
var orbPeriod = Math.round(a * b);
delete obj.avgAlt;
obj.orbitalPeriod = orbPeriod;
return obj;
};
for (var elem in arr) {
newArr.push(getOrbPeriod(arr[elem]));
}
return newArr;
}
// test here
orbitalPeriod([{name : "sputnik", avgAlt : 35873.5553}]);
代码说明:
- GM和earthRadius都给了我们。
- 为了使代码更易于编辑和阅读,等式的每个部分都是单独编写的。
- 创建newArr来存储
orbPeriod
的。 - a是pi的2倍。作为常量的部分在全局范围内,而其余部分是函数的一部分。
- 创建一个函数
gerOrbPeriod()
,它将为任意数量的对象执行所需的工作。 - c是( earthRadius + avgAlt )到立方体。
- b是c的平方根除以GM 。
- 创建orbPeriod以存储a和b的乘积,应用
Math.round()
函数以向上舍入到下一个整数。 - 然后我们删除关键avgAlt ,并添加新密钥及其值。
相关链接
中级代码解决方案:
function orbitalPeriod(arr) {
var GM = 398600.4418;
var earthRadius = 6367.4447;
//Looping through each key in arr object
for(var prop in arr) {
//Rounding off the orbital period value
var orbitalPer = Math.round(2 * Math.PI * Math.sqrt(Math.pow(arr[prop].avgAlt + earthRadius, 3) / GM));
//deleting the avgAlt property
delete arr[prop].avgAlt;
//adding orbitalPeriod property
arr[prop].orbitalPeriod = orbitalPer;
}
return arr;
}
// test here
orbitalPeriod([{name : "sputnik", avgAlt : 35873.5553}]);
代码说明:
- GM和earthRadius都给了我们。
for..in
循环用于迭代给定数组arr中的每个值。- orbitalPer保持使用公式计算的每次迭代的轨道周期值。
- 关键的avgAlt被删除,找到的orbitalPer在arr中分配。
高级代码解决方案
function orbitalPeriod(arr) {
var GM = 398600.4418;
var earthRadius = 6367.4447;
// Loop through each item in the array arr
arr.forEach(function(item) {
// Calculate the Orbital period value
var tmp = Math.round(2 * Math.PI * Math.sqrt(Math.pow(earthRadius + item.avgAlt, 3) / GM));
//Delete the avgAlt property
delete item.avgAlt;
//Add orbitalPeriod property
item.orbitalPeriod = tmp;
});
return arr;
}
// test here
orbitalPeriod([{name : "sputnik", avgAlt : 35873.5553}]);
代码说明:
- GM和earthRadius都给了我们。
forEach()
方法用于在arr中为每个元素( item )执行一次函数。- tmp保持使用公式计算的每个元素的轨道周期值。
- 键avgAlt被删除,并发现轨道周期**(TMP)被分配给键orbitalPeriod。**
相关链接
捐款说明:
- 请勿添加与任何现有解决方案类似的解决方案。如果您认为它**相似但更好** ,那么尝试合并(或替换)现有的类似解决方案。
- 添加解决方案的说明。
- 将解决方案分为以下类别之一 - 基本 , 中级和高级 。
- 如果您添加了任何**相关的主要内容,**请仅添加您的用户名。 ( 不要 删除任何现有的用户名 )