2010-06-29 15 views
9

que tienen esta función:¿Por qué aparece un mensaje de error que .replace no es una función?

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); 
} 

me sale mensaje de error que .replace no es una función, pero en otras funciones que funciona como debería. ¿Cuál es la diferencia?

+0

cadena (cLitreKgValue) .replace – YumYumYum

Respuesta

14

cLitreKgValue puede ser un número en el que se intenta llamar al replace, no a una cadena. En cuyo caso, el error es correcto: los números no tienen un método replace.

+2

... y correcta * * ella (porque estoy pensando que anleon está buscando una respuesta a eso también), el cambio 'cLitreKgValue = 0;' 'a cLitreKgValue = "0";' –

+0

Gracias mucho! Eso pareció hacer el truco. – anleon

+0

String (cLitreKgValue) .replace – YumYumYum

13

cambiar esta situación:

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

a

("" + cLitreKgValue).replace(/,/g, '.') 
+2

mejor cambiar 'cLitreKgValue = 0;' 'a cLitreKgValue = "0";' Creo ... –

+0

@ Nick Craver qué mejor? –

+0

No está agregando una cadena para cada elemento que * no * necesita ningún trabajo de esa manera. Aunque es mejor hacer un cambio general, agregué una respuesta que muestra esto. –

3

Mientras que las otras respuestas funcionan (y son correctos, los números no tienen .replace(), es un String method), creo que un cambio general la estructura es mejor, así:

$("#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); 
    } 
}); 

No hay ninguna razón para hacer todo en el trabajo cuando sabes que es 0 y no afecta el resultado, por lo que si "" significa 0 y anything += 0 tiene ningún efecto neto, omitela :)

+0

Gracias por eso también =) – anleon

Cuestiones relacionadas