2012-10-30 10 views
5

Quando ho serializzare un modulo ASP.NET MVC, ottengo questo:Come si clona un oggetto JavaScript dalle proprietà PascalCase alle proprietà camelCase (in JavaScript)?

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

Ma io voglio questo, in modo che sia coerente con le convenzioni di codifica JS:

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

Come faccio a prendere un oggetto e minuscolo il primo carattere di ogni proprietà?

+0

perché è questo bocciato? –

risposta

2

inoltre necessario verificare la presenza di hasOwnProperty, e rimuovere la proprietà precedente

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

Perché si effettua il controllo tramite hasOwnProperty? Il tuo Object.prototype ha funzionalità aggiuntive? Se è così - che non va bene. Devi definire i tuoi costruttori. – Damask

4

modo semplice è rendere l'iterazione sopra il vostro oggetto:

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

Può essere una soluzione più elegante: sostituirla nella stringa JSON con regexp prima di convertirla in oggetto JS. – Damask

0

Non è meglio trattare queste cose come stringhe e usare Reg exp power?

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

+0

In realtà non è necessario il primo stringify se viene come stringa dal back-end. – Damask

Problemi correlati