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