i was trying to do a calculation to find the average of the price from the array but i seem to be getting NaN, How do i solve it ?
var array = [ ];
var sum = 0;
setInterval (function() {
fetch('https://api.binance.com/api/v3/ticker/price?symbol=ETHEUR')
.then(response => {
return response.json();
})
.then(data => {
array = array.slice(0,10).concat([data.price]);
});
for (var number of array) {
sum = number;
}
average = sum / array.length;
console.log("Average of ETH/EUR every 10 seconds is: " average);
document.getElementById("avgStock").innerHTML= average;
},10000);
This is the result in the console.log
CodePudding user response:
Use parseFloat
to convert the return of the string
coming from the API to float
, so that you can so arithmetic operations.
var array = [ ];
var t = setInterval (function() {
fetch('https://api.binance.com/api/v3/ticker/price?symbol=ETHEUR')
.then(response => {
return response.json();
})
.then(data => {
array = array.slice(0,10).concat([parseFloat(data.price)]);
});
const sum = array.reduce((partialSum, a) => partialSum a, 0);
if(array.length == 0){
console.log("Average of ETH/EUR every 10 seconds is: " 0);
document.getElementById("avgStock").innerHTML= 0;
}
else{
average = sum / array.length;
console.log("Average of ETH/EUR every 10 seconds is: " average);
document.getElementById("avgStock").innerHTML= average;
}
},10000);
Also, I updated the sum logic. It'll help you to calculate the sum in one line without running a loop.
CodePudding user response:
I can see its printing the Average correctly first time, but giving NaN afterwards.
Average of ETH/EUR every 10 seconds is: 1682.39
Average of ETH/EUR every 10 seconds is: NaN
Please do console.log() for data
, array
and sum
. If any of these values giving null
or NaN
that would be the issue to generate NaN for the Average.
CodePudding user response:
I believe the problem is your sum
you're doing:
for (var number of array) {
sum = number;
}
but the number in the array is a string.
You need to parse the number first. There's a nifty shorthand, try this:
for (var number of array) {
sum = number; //<- note the number (parsing this to a number)
}
Or update the array:
array = array.slice(0,10).concat([ data.price]); //<- added a to parse the price
Ideally the data should be coming down from the API in the correct format. I would advocate for fixing the API instead of parsing values