Передача нескольких объектов в массив - PullRequest
0 голосов
/ 04 мая 2020

В настоящее время я работаю над последним промежуточным алгоритмом 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;    
}

Вот тесты:

  1. orbitalPeriod ([{name: "sputnik", avgAlt: 35873.5553}] ) должен вернуть [{name: "sputnik", orbitalPeriod: 86400}].

  2. 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);
  }

1 Ответ

1 голос
/ 04 мая 2020

function orbitalPeriod(arr) {
  const GM = 398600.4418;
  const earthRadius = 6367.4447;


  return arr.map(item => {
      let T = Math.round(2 * Math.PI * Math.sqrt(Math.pow(earthRadius + item.avgAlt, 3)/GM));
      return {name:item.name, orbitalPeriod:T}
  });   
}
                                            
console.log(orbitalPeriod([{name: "iss", avgAlt: 413.6}, {name: "hubble", avgAlt: 556.7}, {name: "moon", avgAlt: 378632.553}, {name : "sputnik", avgAlt : 35873.5553}]))

Вы можете решить эту проблему, возвращая сопоставленный массив. Array.map (item => {}) возвращает новый массив, преобразованный на основе функции стрелки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...