J'ai cette fonction:
function countLitreKgSums(cProductIds){
var cLitreKgSums = new Array();
var cWeek = 0;
for(i=0;i<cProductIds.length;i++){
var cLitreKgSum = 0;
$("#plan_table td[class='week']").each(function(){
cWeek = $(this).html();
var cLitreKgValue = $("input[name*='plan_table_week" + cWeek + "_prod" + cProductIds[i] + "_']").val();
if (cLitreKgValue == "") {
cLitreKgValue = 0;
}
cLitreKgValue = cLitreKgValue.replace(/,/g, '.').replace(/[^\d\.]/g, '').replace(/\s/g, '');
cLitreKgValue = parseFloat(cLitreKgValue);
cLitreKgSum += cLitreKgValue;
});
cLitreKgSum = Math.round(cLitreKgSum * 100) / 100;
cLitreKgSums[i] = cLitreKgSum;
}
return cLitreKgSums;
//console.log(cLitreKgSums);
}
Je reçois un message d'erreur que .replace n'est pas une fonction mais dans d'autres fonctions, cela fonctionne comme il le devrait. Quelle est la différence?
cLitreKgValue
peut être un nombre au point où vous essayez d'appeler replace
dessus, pas une chaîne. Dans ce cas, l'erreur est correcte - les numéros n'ont pas de méthode replace
.
Change ça:
cLitreKgValue.replace(/,/g, '.')
à
("" + cLitreKgValue).replace(/,/g, '.')
vous pouvez utiliser la chaîne de fonction ()
c'est à dire.; String (clitirekgvalue) .replace ....
Fonction de chaîne:
[.____] http://www.w3schools.com/jsref/jsref_string.asp
Tandis que les autres réponses fonctionnent (et sont correctes, les numéros n'ont pas .replace()
, c'est une méthode String
), je pense Un changement de structure global est meilleur, comme celui-ci:
$("#plan_table td[class='week']").each(function(){
cWeek = $(this).html();
var cLitreKgValue = $("input[name*='plan_table_week" + cWeek + "_prod" + cProductIds[i] + "_']").val();
if (cLitreKgValue !== "") {
cLitreKgValue = cLitreKgValue.replace(/,/g, '.').replace(/[^\d\.]/g, '').replace(/\s/g, '');
cLitreKgSum += parseFloat(cLitreKgValue);
}
});
Il n'y a aucune raison de faire tout ce travail quand vous savez que c'est 0
et n'affecte pas le résultat, donc si ""
moyens 0
et anything += 0
n'a pas d'effet net, juste sauter :)