javascript - 转换嵌套数据结构以使用类对象

标签 javascript ecmascript-6

我有以下内容:

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 转换来保持整洁和稳健(转换不应明确提及 infomoreInfo)?在 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/

相关文章:

javascript - 连接两个边界框 bbox

javascript - 我应该将单独的功能放入多个 then 回调中吗?

javascript - 在 javascript 对象上声明函数的最佳方法

javascript - 将多个操作绑定(bind)到事件监听器时的性能问题

javascript - Aurelia:如何在激活期间在 View 模型上设置属性?

javascript - 如何将所有值添加到该数组中?每次创建一个新的 CLIENT 数组并向其推送值

javascript - rails 中的 rjs 类型错误?

javascript - iframe 100% 全宽 bootstrap3

javascript - 使用 AJAX 从 XML 显示图像

javascript - react : TypeError: Cannot read property 'setState' of undefined