В настоящее время я работаю над последним промежуточным алгоритмом FreeCodeCamp, и у меня возникла проблема с переносом нескольких объектов в массив. Я передаю первый тест, который является аргументом с единственным объектом внутри массива, но я проваливаю второй тест, где мне нужно вернуть несколько объектов из аргументов массива, переданных в него с тремя объектами. Я только возвращаю последний объект в массиве
[ { name: 'moon', orbitalPeriod: 2377399 } ];
Я считаю, что все настроено правильно. Вот описание проблемы:
Скрипты промежуточного алгоритма: сопоставление обломков
Возвращает новый массив, который преобразует среднюю высоту элементов в их орбитальные периоды (в секундах).
Массив будет содержать объекты в формате {name: 'name', avgAlt: avgAlt}. Вы можете прочитать об орбитальных периодах в Википедии. Значения должны быть округлены до ближайшего целого числа. Находящееся на орбите тело - это Земля. Радиус Земли составляет 6367,4447 километров, а значение GM для Земли составляет 398600,4418 км3с-2.
T = 2 * pi * sqrt (r ^ 3 / GM), где r = earthRadius + avgAlt, что расстояние от средней точки земли до объекта и T = орбитальный период
Так что вся моя математика кажется правильной. T, который является орбитальным периодом, который я пытаюсь вернуть, возвращает значение, которое я ожидаю. Я считаю, что моя проблема заключается в том, что я присваиваю новое значение своему satelliteObject
объекту, где я удалил avgAlt
в соответствии с инструкциями и добавил orbitalPeriod
cal c в satelliteObject
, но он только добавляется до последнего значения второго теста.
Мой код:
function orbitalPeriod(arr) {
const GM = 398600.4418;
const earthRadius = 6367.4447;
let satelliteObject;
let satObjectValue;
let orbitalArr = [];
const mapObjects = Object.entries(arr.map(item => item));
for (let values in mapObjects) {
satelliteObject = arr[values];
satObjectValue = satelliteObject.avgAlt;
delete satelliteObject.avgAlt;
}
const radius = earthRadius + satObjectValue;
//T = Orbital Period
const T = Math.round(2 * Math.PI * Math.sqrt(Math.pow(radius, 3)/GM));
Object.assign(satelliteObject, { orbitalPeriod: T });
orbitalArr.push(satelliteObject);
return orbitalArr;
}
Вот тесты:
orbitalPeriod ([{name: "sputnik", avgAlt: 35873.5553}] ) должен вернуть [{name: "sputnik", orbitalPeriod: 86400}].
orbitalPeriod ([{name: "iss", avgAlt: 413.6}, {name: "hubble" , avgAlt: 556.7}, {name: "moon", avgAlt: 378632.553}]) должен возвращать [{name: "iss", orbitalPeriod: 5557}, {name: "hubble", orbitalPeriod: 5734}, {name: " moon ", orbitalPeriod: 2377399}]
Итак, я прохожу тест 1 выше, но в тесте 2 корректно получаю только последний объект массива.
Я не совсем уверен, как передать Object.assign несколько раз. Я попытался передать это внутри for в l oop после объявления const T и выдвинуть orbitalPeriod внутри этого l oop, но я получаю только пустой массив:
for (let values in orbitalArr) {
orbitalArr[values] = Object.assign(satelliteObject, { orbitalPeriod: T });
orbitalArr.push(satelliteObject);
}