2010-06-29 42 views
9

tôi có chức năng này:Tại sao tôi nhận được thông báo lỗi .replace không phải là một chức năng?

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

tôi nhận được thông báo lỗi rằng .replace không phải là một chức năng nhưng trong các chức năng khác nó hoạt động như mong muốn. Sự khác biệt là gì?

+0

string (cLitreKgValue) .replace – YumYumYum

Trả lời

14

cLitreKgValue có thể là một số tại điểm mà bạn cố gắng gọi replace trên đó, không phải là chuỗi. Trong trường hợp đó, lỗi là chính xác - số không có phương thức replace.

+2

... và * đúng * nó (vì tôi đang nghĩ anleon đó là tìm kiếm một cũng trả lời cho điều đó), thay đổi 'cLitreKgValue = 0;' thành 'cLitreKgValue =" 0 ";' –

+0

Cảm ơn rất nhiều! Điều đó dường như làm các trick. – anleon

+0

String (cLitreKgValue) .replace – YumYumYum

13

Thay đổi này:

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

để

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

Tốt hơn để thay đổi 'cLitreKgValue = 0;' thành 'cLitreKgValue =" 0 ";' Tôi nghĩ ... –

+0

@Nick Craver tại sao tốt hơn? –

+0

Bạn không thêm một chuỗi cho mọi phần tử * không * cần bất kỳ công việc nào theo cách đó. Mặc dù tốt hơn là để thực hiện một thay đổi tổng thể, tôi đã thêm một câu trả lời cho thấy điều này. –

3

Trong khi câu trả lời khác làm việc (và là chính xác, con số này không có .replace(), đó là một String method), tôi nghĩ rằng một sự thay đổi cấu trúc tổng thể tốt hơn, như sau:

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

Không có lý do gì để làm tất cả mọi thứ tại nơi làm việc khi bạn biết đó là 0 và không ảnh hưởng đến kết quả, vì vậy nếu "" nghĩa 0anything += 0 không có tác dụng net, chỉ cần bỏ qua nó :)

+0

Cảm ơn vì điều đó quá =) – anleon

Các vấn đề liên quan