166 lines
11 KiB
Markdown
166 lines
11 KiB
Markdown
![]() |
---
|
|||
|
title: Map the Debris
|
|||
|
localeTitle: Карта обломков
|
|||
|
---
|
|||
|
 Не забудьте использовать **`Read-Search-Ask`** если вы застряли. Попробуйте подключить программу  и напишите свой собственный код 
|
|||
|
|
|||
|
###  Проблема Объяснение:
|
|||
|
|
|||
|
Первое, что нужно сделать, это познакомиться с программой, зная, что такое орбитальный период. Вы должны вернуть новый массив, который преобразует среднюю высоту элемента в их орбитальные периоды. Детали, которые обычно находили сложными, находят формулу, реализуют ее и для некоторых людей, изменяя объекты ключом. Тем не менее, что-то, что не очень понятно, заключается в том, что ваша программа должна иметь возможность проверять любое количество объектов в массиве; Это то, что проверено на второй части.
|
|||
|
|
|||
|
#### Связанные ссылки
|
|||
|
|
|||
|
* [Орбитальный период](https://en.wikipedia.org/wiki/Orbital_period)
|
|||
|
* [Объекты JS](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)
|
|||
|
* [Math.PI](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI)
|
|||
|
* [JS Math Pow](http://forum.freecodecamp.com/t/javascript-math-pow/14685)
|
|||
|
* [Math.sqrt ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt)
|
|||
|
* [Math.round ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round)
|
|||
|
|
|||
|
##  Подсказка: 1
|
|||
|
|
|||
|
Необходимая формула:
|
|||
|
|
|||
|

|
|||
|
|
|||
|
> _попытаться решить проблему сейчас_
|
|||
|
|
|||
|
##  Подсказка: 2
|
|||
|
|
|||
|
Используйте `Math.round()` для округления до следующего целого числа в соответствии с запросом. Использование `Math.ceil()` позволит вам пройти первый тест, но не `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}]);
|
|||
|
```
|
|||
|
|
|||
|
 [Код запуска](https://repl.it/CLow/0)
|
|||
|
|
|||
|
### Код Объяснение:
|
|||
|
|
|||
|
* **GM** и **earthRadius** даны нам.
|
|||
|
* Чтобы упростить редактирование и чтение кода, каждая часть уравнения записывается отдельно.
|
|||
|
* Создайте **newArr** для хранения `orbPeriod` .
|
|||
|
* **a** - 2 раза pi. Часть, которая является константой, находится в глобальном масштабе, а остальная часть - часть функции.
|
|||
|
* Создайте функцию `gerOrbPeriod()` , которая выполнит необходимую работу для любого количества объектов.
|
|||
|
* **c** является ( **earthRadius** + **avgAlt** ) в куб.
|
|||
|
* **b** - квадратный корень из **c,** деленный на **GM** .
|
|||
|
* Создайте **orbPeriod** для сохранения продукта **a** и **b** , используя функцию `Math.round()` применяемую для округления до следующего целого числа.
|
|||
|
* Затем мы удаляем ключ **avgAlt** и добавляем новый ключ и его значение.
|
|||
|
|
|||
|
#### Связанные ссылки
|
|||
|
|
|||
|
* [JS For In Loop](http://forum.freecodecamp.com/t/javascript-for-in-loop/14665)
|
|||
|
* [JS Array Prototype Push](http://forum.freecodecamp.com/t/javascript-array-prototype-push/14298)
|
|||
|
|
|||
|
##  Решение промежуточного кода:
|
|||
|
```
|
|||
|
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}]);
|
|||
|
```
|
|||
|
|
|||
|
 [Код запуска](https://repl.it/CLoy/0)
|
|||
|
|
|||
|
### Код Объяснение:
|
|||
|
|
|||
|
* **GM** и **earthRadius** даны нам.
|
|||
|
* Цикл `for..in` используется для повторения каждого значения в заданном массиве **arr** .
|
|||
|
* **orbitalPer** содержит значение орбитального периода для каждой итерации, рассчитанной по формуле.
|
|||
|
* Ключ **avgAlt** удаляется, а найденный **orbitalPer** присваивается в **обр** .
|
|||
|
|
|||
|
##  Расширенное решение для кода:
|
|||
|
```
|
|||
|
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}]);
|
|||
|
```
|
|||
|
|
|||
|
 [Код запуска](https://repl.it/CLoz/0)
|
|||
|
|
|||
|
### Код Объяснение:
|
|||
|
|
|||
|
* **GM** и **earthRadius** даны нам.
|
|||
|
* Метод `forEach()` используется для выполнения функции один раз для элемента ( **элемента** ) в **обр** .
|
|||
|
* **tmp** содержит значение орбитального периода для каждого элемента, вычисленного по формуле.
|
|||
|
* Ключ **avgAlt** удаляется, и найденный орбитальный период ( **tmp** ) присваивается ключу **orbitalPeriod** .
|
|||
|
|
|||
|
#### Связанные ссылки
|
|||
|
|
|||
|
* [Прототип JS Array для всех](http://forum.freecodecamp.com/t/javascript-array-prototype-foreach/14290)
|
|||
|
|
|||
|
##  ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:
|
|||
|
|
|||
|
*  **НЕ** добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это **_похоже, но лучше_** , попробуйте объединить (или заменить) существующее подобное решение.
|
|||
|
* Добавьте объяснение своего решения.
|
|||
|
* Классифицируйте решение в одной из следующих категорий - **Basic** , **Intermediate** и **Advanced** . 
|
|||
|
* Пожалуйста, добавьте свое имя пользователя, только если вы добавили **соответствующее основное содержимое** . (  **_НЕ_** _удаляйте существующие имена пользователей_ )
|
|||
|
|
|||
|
> Видеть  [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272) для [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272) для справки.
|