freeCodeCamp/guide/chinese/certifications/javascript-algorithms-and-d.../intermediate-algorithm-scri.../map-the-debris/index.md

7.8 KiB
Raw Blame History

title localeTitle
Map the Debris 映射碎片

:triangular_flag_on_post:如果卡住,请记得使用**Read-Search-Ask** 。尝试配对程序:busts_in_silhouette:并编写自己的代码:pencil:

:checkered_flag:问题说明:

首先要做的是通过了解轨道周期究竟是什么来熟悉程序的内容。你将返回一个新的数组,将该元素的平均高度转换为它们的轨道周期。通常很难找到的部分是找到公式,实现它,对某些人来说,通过键修改对象。但是,一些不太清楚的事实是你的程序必须能够检查数组中的任意数量的对象;这是在第二部分测试的内容。

相关链接

:speech_balloon:提示1

所需的公式是:

现在尝试解决问题

:speech_balloon:提示2

使用Math.round()按要求向上舍入到下一个整数。使用Math.ceil()将允许您通过第一个测试但是第二个测试失败。

现在尝试解决问题

:speech_balloon:提示3

了解如何删除和添加JavaScript对象的密钥。

现在尝试解决问题

扰流警报!

警告牌

提前解决!

:beginner:基本代码解决方案

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}]); 

:rocket: 运行代码

代码说明:

  • GMearthRadius都给了我们。
  • 为了使代码更易于编辑和阅读,等式的每个部分都是单独编写的。
  • 创建newArr来存储orbPeriod的。
  • a是pi的2倍。作为常量的部分在全局范围内而其余部分是函数的一部分。
  • 创建一个函数gerOrbPeriod() ,它将为任意数量的对象执行所需的工作。
  • c是( earthRadius + avgAlt )到立方体。
  • bc的平方根除以GM
  • 创建orbPeriod以存储ab的乘积,应用Math.round()函数以向上舍入到下一个整数。
  • 然后我们删除关键avgAlt ,并添加新密钥及其值。

相关链接

:sunflower:中级代码解决方案:

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}]); 

:rocket: 运行代码

代码说明:

  • GMearthRadius都给了我们。
  • for..in循环用于迭代给定数组arr中的每个值。
  • orbitalPer保持使用公式计算的每次迭代的轨道周期值。
  • 关键的avgAlt被删除,找到的orbitalPerarr中分配。

:rotating_light:高级代码解决方案

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}]); 

:rocket: 运行代码

代码说明:

  • GMearthRadius都给了我们。
  • forEach()方法用于在arr中为每个元素( item )执行一次函数。
  • tmp保持使用公式计算的每个元素的轨道周期值。
  • avgAlt被删除,并发现轨道周期**TMP被分配给键orbitalPeriod。**

相关链接

:clipboard:捐款说明:

  • :warning: 请勿添加与任何现有解决方案类似的解决方案。如果您认为它**相似但更好** ,那么尝试合并(或替换)现有的类似解决方案。
  • 添加解决方案的说明。
  • 将解决方案分为以下类别之一 - 基本 中级高级:traffic_light:
  • 如果您添加了任何**相关的主要内容,**请仅添加您的用户名。 :warning: 不要 删除任何现有的用户名

看到:point_right: Wiki Challenge Solution Template供参考。