我有以下内容:
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"}
}
]
但是,我希望用户成员是 User 类型的对象。所以我希望将上面的内容转换为以下内容:
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 转换来保持整洁和稳健(转换不应明确提及 info
或 moreInfo
)?在 python 中,我可能会使用推导式来执行此操作,但 javascript 中的数组推导式不是标准的。
最佳答案
您可以循环数据并将属性更新为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())})
关于javascript - 转换嵌套数据结构以使用类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40561610/