将新属性推送到循环内的当前对象

时间:2017-03-08 14:10:51

标签: javascript arrays loops object

在我的脚本中,我使async得到我的对象的数据。

这是脚本:

self.organizations = [];

Service.get(self.orgId).then(function (org) {
    self.organizations.push({
        Organization: org,
        Role: "User"
    });

    Service.getGroups().then(function (result) {
        _.forEach(result.Objects, function (res) {
            if (res.org.Id === self.orgId) {
                self.organizations.Groups = res.Groups;
            }
        });
    });
});

首先,我获得该组织的数据。然后在这个承诺内部检索所有组,如果一个组作为相同的组织ID,则表示组和组织被绑定。

res.Groups模型示例:

res.Groups = [
    {Id: 1, Name: "Group Name 1"},
    {Id: 2, Name: "Group Name 2"}
];

由于未显示其他功能,我无法使用任何其他功能"架构"。

然后我想在当前组织的索引及其组中添加self.organizations数组。但结果是我得到了:

self.organizations = [
    {Organization: "First Organization", Role: "User"},
    {Organization: "Second Organization", Role: "User"},
    Groups: [
        {Id: 1, Name: "Group Name 1"},
        {Id: 2, Name: "Group Name 2"}
        {Id: 3, Name: "Group Name 3"}
    ]
];

我期待的是:

self.organizations = [
    {
        Organization: "First Organization",
        Role: "User",
        Groups: [
            {Id: 1, Name: "Group Name 1"},
            {Id: 1, Name: "Group Name 2"}
        ]
    },
    {
        Organization: "Second Organization",
        Role: "User",
        Groups: [
            {Id: 3, Name: "Group Name 3"}
        ]
    }
];

我不知道如何在当前组织内推送res.Groups(当前的第一个承诺迭代)。我知道我的结构可能不合适,但我很难找到合适的工作。

1 个答案:

答案 0 :(得分:1)

您可以先将Groups添加到当前对象,然后将其推送到集合中:

self.organizations = [];

Service.get(self.orgId).then(function (org) {
    var item = {
        Organization: org,
        Role: "User"
    }

    Service.getGroups().then(function (result) {
        _.forEach(result.Objects, function (res) {
            if (res.org.Id === self.orgId) {
                item.Groups = res.Groups;
            }
        });

        self.organizations.push(item);
    });
});