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

8.4 KiB

title localeTitle
Map the Debris Mapa de los escombros

:triangular_flag_on_post: Recuerda usar Read-Search-Ask si te atascas. Tratar de emparejar el programa :busts_in_silhouette: y escribe tu propio código :pencil:

:checkered_flag: Explicación del problema:

Lo primero que debe hacer es familiarizarse con lo que es el programa al saber qué es exactamente el período Orbital. Debe devolver una nueva matriz que transforma la altitud promedio del elemento en sus períodos orbitales. Las partes que generalmente se encuentran difíciles son encontrar la fórmula, implementarla y, para algunas personas, modificar los objetos con la tecla. Sin embargo, algo que no está muy claro es el hecho de que su programa debe poder verificar cualquier cantidad de objetos en la matriz; Esto es lo que se prueba en la segunda parte.

Enlaces relevantes

:speech_balloon: Sugerencia: 1

La fórmula necesaria es:

intenta resolver el problema ahora

:speech_balloon: Sugerencia: 2

Use Math.round() para redondear al siguiente número entero como se solicita. Usar Math.ceil() te permitirá pasar la primera prueba pero fallará la segunda.

intenta resolver el problema ahora

:speech_balloon: Sugerencia: 3

Descubra cómo eliminar y agregar una clave a un objeto de JavaScript.

intenta resolver el problema ahora

¡Alerta de spoiler!

señal de advertencia

¡Solución por delante!

:beginner: Solución de código básico:

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: Ejecutar código

Explicación del código:

  • GM y EarthRadius nos son dados.
  • Para hacer que el código sea más fácil de editar y leer, cada parte de la ecuación se escribe por separado.
  • Cree newArr para almacenar los orbPeriod 's.
  • a es 2 veces pi. La parte que es una constante está en el ámbito global, mientras que el resto forma parte de una función.
  • Cree una función, gerOrbPeriod() que hará el trabajo requerido para cualquier cantidad de objetos.
  • c es ( earthRadius + avgAlt ) al cubo.
  • b es la raíz cuadrada de c dividida por GM .
  • Cree orbPeriod para almacenar el producto de a y b , con la función Math.round() aplicada para redondear al siguiente número entero.
  • Luego eliminamos la clave avgAlt y agregamos la nueva clave y su valor.

Enlaces relevantes

:sunflower: Solución de código intermedio:

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: Ejecutar código

Explicación del código:

  • GM y EarthRadius nos son dados.
  • Se for..in bucle for..in para iterar a través de cada valor en la matriz dada arr .
  • orbitalPer mantiene el valor del período orbital para cada iteración calculada utilizando la fórmula.
  • La clave avgAlt se elimina y orbitalPer se encuentra asignada en arr .

:rotating_light: Solución avanzada de código:

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: Ejecutar código

Explicación del código:

  • GM y EarthRadius nos son dados.
  • El método forEach() se utiliza para ejecutar la función una vez por elemento ( elemento ) en arr .
  • tmp contiene el valor del período orbital para cada elemento calculado con la fórmula.
  • La clave avgAlt se elimina y el período orbital ( tmp ) encontrado se asigna a la clave orbitalPeriod .

Enlaces relevantes

:clipboard: NOTAS PARA LAS CONTRIBUCIONES:

  • :warning: NO agregue soluciones que sean similares a las soluciones existentes. Si cree que es similar pero mejor , intente fusionar (o reemplazar) la solución similar existente.
  • Agregue una explicación de su solución.
  • Categorice la solución en una de las siguientes categorías: Básica , Intermedia y Avanzada . :traffic_light:
  • Agregue su nombre de usuario solo si ha agregado algún contenido principal relevante . ( :warning: NO elimine ningún nombre de usuario existente )

Ver :point_right: Wiki Challenge Solution Template para referencia.