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

11 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() позволит вам пройти первый тест, но не 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: Код запуска

Код Объяснение:

  • GM и earthRadius даны нам.
  • Чтобы упростить редактирование и чтение кода, каждая часть уравнения записывается отдельно.
  • Создайте newArr для хранения orbPeriod .
  • a - 2 раза pi. Часть, которая является константой, находится в глобальном масштабе, а остальная часть - часть функции.
  • Создайте функцию gerOrbPeriod() , которая выполнит необходимую работу для любого количества объектов.
  • c является ( earthRadius + avgAlt ) в куб.
  • b - квадратный корень из c, деленный на GM .
  • Создайте orbPeriod для сохранения продукта a и b , используя функцию 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: Код запуска

Код Объяснение:

  • GM и earthRadius даны нам.
  • Цикл for..in используется для повторения каждого значения в заданном массиве arr .
  • orbitalPer содержит значение орбитального периода для каждой итерации, рассчитанной по формуле.
  • Ключ avgAlt удаляется, а найденный orbitalPer присваивается в обр .

: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: Код запуска

Код Объяснение:

  • GM и earthRadius даны нам.
  • Метод forEach() используется для выполнения функции один раз для элемента ( элемента ) в обр .
  • tmp содержит значение орбитального периода для каждого элемента, вычисленного по формуле.
  • Ключ avgAlt удаляется, и найденный орбитальный период ( tmp ) присваивается ключу orbitalPeriod .

Связанные ссылки

:clipboard: ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:

  • :warning: НЕ добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это похоже, но лучше , попробуйте объединить (или заменить) существующее подобное решение.
  • Добавьте объяснение своего решения.
  • Классифицируйте решение в одной из следующих категорий - Basic , Intermediate и Advanced . :traffic_light:
  • Пожалуйста, добавьте свое имя пользователя, только если вы добавили соответствующее основное содержимое . ( :warning: НЕ удаляйте существующие имена пользователей )

Видеть :point_right: Wiki Challenge Solution Template для Wiki Challenge Solution Template для справки.