2012-10-30 41 views
5

Khi tôi serialize một hình thức ASP.NET MVC, tôi có được điều này:Làm cách nào để sao chép một đối tượng JavaScript từ thuộc tính PascalCase sang thuộc tính camelCase (trong JavaScript)?

{ 
    DestinationId: "e96dd00a-b042-41f7-bd59-f369904737b6", 
    ... 
} 

Nhưng tôi muốn điều này, để nó phù hợp với công ước mã JS:

{ 
    destinationId: "e96dd00a-b042-41f7-bd59-f369904737b6", 
    ... 
} 

Làm thế nào để có một đối tượng và chữ thường thì ký tự đầu tiên của mỗi thuộc tính?

+0

Tại sao điều này lại bị bỏ phiếu? –

Trả lời

2

Cũng phải kiểm tra cho hasOwnProperty, và loại bỏ các tài sản

var object = { DestinationId: "e96dd00a-b042-41f7-bd59-f369904737b6" } 
for (var prop in object) { 
    if (object.hasOwnProperty(prop)) { 
    object[ prop.substring(0,1).toLowerCase() + prop.substring(1) ] = object[ prop ]; 
    delete object[ prop ]; 
    } 
} 
+0

Tại sao bạn thực hiện kiểm tra bằng hasOwnProperty? Object.prototype của bạn có chức năng bổ sung? Nếu nó là như vậy - điều đó không tốt. Bạn phải xác định các nhà xây dựng của riêng bạn. – Damask

4

Cách đơn giản là làm cho lặp trên đối tượng của bạn:

var newObj = {}; 
for (var p in o) { 
    newObj[p.substring(0,1).toLowerCase()+p.substring(1)] = o[p]; 
} 
+0

Có thể là giải pháp thanh lịch hơn - thay thế bằng chuỗi JSON bằng regexp trước khi chuyển sang đối tượng JS. – Damask

0

trước Không phải là nó tốt hơn để đối xử với những điều như dây đàn và sử dụng Reg exps power?

JSON.parse( JSON.stringify(z).replace( /(\"[^"])([^"]*\"\:)/g, function(all, head, tail) { return head.toLowerCase() + tail; } ) )

+0

Trên thực tế bạn không cần phải xâu chuỗi đầu tiên nếu nó đến như chuỗi từ back-end. – Damask

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