2016-11-12 2 views
0

Ich habe folgendes:Konvertieren einer verschachtelten Datenstruktur eine Klasse zu verwenden Objekt

data = [ 
    { 
     "user":{"firstName":"John","lastName":"Doe"}, 
     "info":{"x":1,"y":2}, 
     "moreInfo":{"name":"johns12info"} 
    }, 
    { 
     "user":{"firstName":"John","lastName":"Doe"}, 
     "info":{"x":2,"y":2}, 
     "moreInfo":{"name":"johns22info"} 
    }, 
    { 
     "user":{"firstName":"Mary","lastName":"Doe"}, 
     "info":{"x":2,"y":2}, 
     "moreInfo":{"name":"marys22info"} 
    } 

]

möchte ich jedoch für die Benutzer Mitglieder Objekte vom Typ Benutzer sein. So möchte ich die oben auf das folgende konvertieren:

data = [ 
    { 
     "user":User({"firstName":"John","lastName":"Doe"}), 
     "info":{"x":1,"y":2}, 
     "moreInfo":{"name":"johns12info"} 
    }, 
    { 
     "user":User({"firstName":"John","lastName":"Doe"}), 
     "info":{"x":2,"y":2}, 
     "moreInfo":{"name":"johns22info"} 
    }, 
    { 
     "user":User({"firstName":"Mary","lastName":"Doe"}), 
     "info":{"x":2,"y":2}, 
     "moreInfo":{"name":"marys22info"} 
    } 

]

Was Javascript ES6 Umwandlung kann ich das ist ordentlich und robust (die Umwandlung nicht explizit erwähnen info oder moreInfo)? In Python hätte ich wahrscheinlich Comprehensions verwendet, aber Array-Comprehensions in Javascript sind kein Standard.

+0

data = data.map (x => {x.user = User (x.user); return x}) – Rajesh

Antwort

2

Sie können Daten geschleift und die Eigenschaft als x.user=new User(x.user)

Hinweis aktualisieren: dieses bestehende Array außer Kraft setzen.

function User(obj) { 
 
    this.firstName = obj.firstName; 
 
    this.lastName = obj.lastName; 
 
    this.fullName =() => { 
 
    return this.firstName + " " + this.lastName 
 
    } 
 
} 
 

 
var data = [{ "user": { "firstName": "John", "lastName": "Doe" }, "info": { "x": 1, "y": 2 }, "moreInfo": { "name": "johns12info" } }, { "user": { "firstName": "John", "lastName": "Doe" }, "info": { "x": 2, "y": 2 }, "moreInfo": { "name": "johns22info" } }, { "user": { "firstName": "Mary", "lastName": "Doe" }, "info": { "x": 2, "y": 2 }, "moreInfo": { "name": "marys22info" } }]; 
 

 
data.forEach(x => { 
 
    x.user = new User(x.user); 
 
}); 
 

 
data.forEach(x=>{console.log(x.user.fullName())})

Wenn Sie ein neues Array erstellen möchten, verwenden Sie array.map

function User(obj) { 
 
    this.firstName = obj.firstName; 
 
    this.lastName = obj.lastName; 
 
    this.fullName =() => { 
 
    return this.firstName + " " + this.lastName 
 
    } 
 
} 
 

 
var data = [{ "user": { "firstName": "John", "lastName": "Doe" }, "info": { "x": 1, "y": 2 }, "moreInfo": { "name": "johns12info" } }, { "user": { "firstName": "John", "lastName": "Doe" }, "info": { "x": 2, "y": 2 }, "moreInfo": { "name": "johns22info" } }, { "user": { "firstName": "Mary", "lastName": "Doe" }, "info": { "x": 2, "y": 2 }, "moreInfo": { "name": "marys22info" } }]; 
 

 
var pData = data.map(x => { 
 
    x.user = new User(x.user); 
 
    return x; 
 
}); 
 

 
pData.forEach(x=>{console.log(x.user.fullName())})

+0

Schöne Beschreibung. –

0

Sie könnten eine Destrukturierung verwenden und die Daten iterieren.

function User({ firstName, lastName }){ 
 
    this.firstName = firstName, 
 
    this.lastName = lastName; 
 
} 
 

 
var data = [{ user: { firstName: "John", lastName: "Doe" }, info: { x: 1, y: 2 }, moreInfo: { name: "johns12info" } }, { user: { firstName: "John", lastName: "Doe" }, info: { x: 2, y: 2 }, "moreInfo": { name: "johns22info" } }, { user: { firstName: "Mary", lastName: "Doe" }, info: { x: 2, y: 2 }, moreInfo: { name: "marys22info" } }]; 
 

 
data.forEach(o => o.user = new User(o.user)); 
 
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Verwandte Themen