There is a lot going on here that I am trying to wrap my head around. In order to not confuse myself, I wanted to get the first testcase to pass before I make the code more robust for the 2nd (and subsequent) testcase(s).

When I run my current code in Atom/Chrome console, I get the following result (which I think is right):

*FinalArray {name: “sputnik”, orbitalPeriod: 86400}*

But in FCC, I get the following error:

`orbitalPeriod([{name : "sputnik", avgAlt : 35873.5553}]) should return [{name: "sputnik", orbitalPeriod: 86400}].`

What am I missing?

Thank you,

**Your code so far**

```
function orbitalPeriod(arr) {
var GM = 398600.4418;
var earthRadius = 6367.4447;
let name = arr[0]["name"];
let avgAlt = arr[0]["avgAlt"];
//(earthRadius + avgAlt)^3:
let firstCalc = Math.pow((earthRadius + avgAlt), 3);
//firstCalc/GM:
let secondCalc = firstCalc/GM;
//sqrt of secondCalc:
let thirdCalc = Math.sqrt(secondCalc);
//final result:
let finalResult = Math.round(thirdCalc * 2 * Math.PI);
//present final result:
function FinalArray(name, seconds){
this.name = name;
this.orbitalPeriod = seconds;
}
var myFinalArray = new FinalArray(name, finalResult);
console.log(myFinalArray);
}
//orbitalPeriod([{name : "sputnik", avgAlt : 35873.5553}]);
```

**Link to the challenge:**

https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/map-the-debris

Looks like you’re returning the object – but the test case is checking the object in the first position of an array…

1 Like

Oh yes I see. OK.

So then I created an arr and tried to push final result object to that array but am getting very odd result: `1`

(just the number `1`

…).

New code:

```
function orbitalPeriod(arr) {
var GM = 398600.4418;
var earthRadius = 6367.4447;
let finalArr = [];
let name = arr[0]["name"];
let avgAlt = arr[0]["avgAlt"];
//(earthRadius + avgAlt)^3:
let firstCalc = Math.pow((earthRadius + avgAlt), 3);
//firstCalc/GM:
let secondCalc = firstCalc/GM;
//sqrt of secondCalc:
let thirdCalc = Math.sqrt(secondCalc);
//final result:
let finalResult = Math.round(thirdCalc * 2 * Math.PI);
//present final result:
function FinalArray(name, seconds){
this.name = name;
this.orbitalPeriod = seconds;
}
var myFinalArray = new FinalArray(name, finalResult);
return finalArr.push(myFinalArray);
}
//orbitalPeriod([{name : "sputnik", avgAlt : 35873.5553}]);
```

So tell me – what does `finalArr.push(...)`

actually return? Take a look at theMDN docs on Array.push(). That’s where your `1`

is coming from.

You might want to do the `finalArr.push(...)`

in one step, then `return finalArr`

as a separate step.

1 Like

Thanks for all your help @snowmonkey.

My final code:

```
function orbitalPeriod(arr) {
var GM = 398600.4418;
var earthRadius = 6367.4447;
let finalArr = [];
for(var i = 0; i < arr.length; i++){
let name = arr[i]["name"];
let avgAlt = arr[i]["avgAlt"];
//(earthRadius + avgAlt)^3:
let firstCalc = Math.pow((earthRadius + avgAlt), 3);
//firstCalc/GM:
let secondCalc = firstCalc/GM;
//sqrt of secondCalc:
let thirdCalc = Math.sqrt(secondCalc);
//final result:
let finalResult = Math.round(thirdCalc * 2 * Math.PI);
console.log("This is the final result: " + finalResult);
//present final result:
function FinalArray(name, seconds){
this.name = name;
this.orbitalPeriod = seconds;
}
var myFinalArray = new FinalArray(name, finalResult);
finalArr.push(myFinalArray);
};
return finalArr;
}
//orbitalPeriod([{name: "iss", avgAlt: 413.6}, {name: "hubble", avgAlt: 556.7}, {name: "moon", avgAlt: 378632.553}])
//should return [{name : "iss", orbitalPeriod: 5557}, {name: "hubble", orbitalPeriod: 5734}, {name: "moon", orbitalPeriod: 2377399}].
```

Great work, looks good!

Now, can you think of a way to do the same thing without a for loop? Have you learned about a function that operates on an array, and is passed a function to perform on each member of that array? One that returns a new array of the same length?

Not saying your answer is wrong, just that you can handle the same problem in many ways. But… If 98 job applicants use a for loop and two use Array.map(), i’m paying attention to those two.

1 Like

I will try it and get back to you.

1 Like