web-dev-qa-db-fra.com

Pourquoi est-ce que je reçois un message d'erreur que .ePlace n'est pas une fonction?

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?

12
anleon

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.

21
Andrzej Doyle

Change ça:

cLitreKgValue.replace(/,/g, '.')

à

("" + cLitreKgValue).replace(/,/g, '.')
14
Jonathon Faust

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

5
Joao B

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 :)

3
Nick Craver