2016-11-12 47 views
0

我有以下:轉換嵌套數據結構使用一個類對象

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 = [ 
    { 
     "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"} 
    } 

]

的JavaScript ES6的轉換可以使用哪些是整潔和強大的(轉換應該沒有明確的提到infomoreInfo)?在python中,我可能會使用理解來做到這一點,但在JavaScript中的數組理解是非標準的。

+0

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

回答

2

你也可以遍歷數據和更新財產x.user=new User(x.user)

注:這將覆蓋現有的陣列。

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

如果要創建一個新的數組,使用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

很好的描述。 –

0

你可以使用解構和迭代數據。

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

相關問題