Buen día a todos, estoy tratando de obtener el valor numérico de 'review' lo que pasa es que en el JSON lo devuelve como un String y por lo tanto no puedo realizar una suma que hice resultando un valor sin sentido
El objetivo es que, cuando alguien hace un comentario sobre un producto X, los datos se guarden en Firebase en un JSON, el problema es que 'review' se guarda como un String y no como un número
¿Hay alguna manera de tomar este único dato y convertirlo en número?
Esta es la respuesta JSON
"[{\"review\":\"4\",\"comment\":\"Good product \",\"name\":\"SnowFall\",\"image\":\"https://lh3.googleusercontent.com\",\"method\":\"google\"}]"Este es mi mecanografiado
callback(i, totalReviews) { if (!this.render) { this.render = true; let globalRating = 0; let globalReviews = 0; setTimeout(function () { totalReviews.forEach((review, index) => { globalRating += review.length; for (const i in review) { globalReviews += review[i].review; console.log("globalReviews", globalReviews); } }) console.log("Raiting", globalRating); console.log("Reviews", globalReviews); let averageReviews = Math.round(globalReviews / globalRating); let precentage = Math.round(globalReviews * 100 / (globalRating * 5)); $(".globalRating").html(globalRating); $(".percentage").html(precentage); let averageRating = DinamicReviews.fnc(averageReviews); $(".br-theme-fontawesome-stars").html(` <select class="ps-rating reviewsOption" data-read-only="true"></select> `) for (let i = 0; i < averageRating.length; i++) { $(".reviewsOption").append(` <option value="${averageRating[i]}">${i + 1}</option> `) } Rating.fnc(); }, i * 10) } }Así se guarda en FireBase FireBase RealTime Database
Así es como se ve en mi FrontEnd FrontEnd
Hay una línea en la que asigna el valor .review a la variable globalReviews , ya que está usando += esto concatenará la cadena y ese es el problema al que se enfrenta.
Si cambia esa misma línea a: globalReviews += +review[i].review;
Esto solucionará el error.
La razón por la que funciona agregar un signo + delante de una variable es porque este signo se conoce como Operador Unario Plus , que convierte el valor en un número o, en caso de que el valor almacenado no sea un número, se convertirá siguiendo la documentación del Operador Unario Plus .
Para hacer que este código sea seguro y, por lo tanto, no agregue un posible NaN , puede fallar a 0 usando la siguiente sintaxis globalReviews += +review[i].review || 0;