角度服务 - 多个查询和求和

时间:2016-03-27 20:46:43

标签: javascript angularjs json ajax

我有1个API /项目,它们返回带有

的JSON
[  
   {  
      "id":100,
      "name":"some name",
      "x": "y"
   },
   {  
      "id":200,
      "another name",
      "x": "z"
   }
]

然后我有另一个API /成本调用返回类似于:

的内容
[  
   {  
      "projectid":100,
      "cost":300
   },
   {  
      "projectid":100,
      "cost":100
   },
   {  
      "projectid":200,
      "cost":500
   }
]

我目前写了一堆ajax / jquery / JS代码,用“id”,“name”和总和“cost”构建一个JS对象。我只是将其字符串化为JSON对象。

然而,以下查询更复杂,看起来像是一种低效且几乎不可能的方式来完成原始JS,所以我切换到角度服务,因为它更容易为前端团队注入。

我根本不熟悉角度,而且我只有一个简单的服务来查询所有项目或1个给出ID的项目。

是否可以在Angular中查询API并构建一个仅从第一个查询中获取名称 id 的JSON,并总结 cost < / em>用于第二个查询中的相应项目,并返回带有以下内容的JSON:

[  
   {  
      "id":100,
      "name":"some name",
      "cost":400
   }
]
[  
   {  
      "id":200,
      "name":"another name",
      "cost":200
   }
]

由于

2 个答案:

答案 0 :(得分:3)

这是一个简单的Javascript和线性复杂的解决方案。

var project = [{ "id": 100, "name": "some name", "x": "y" }, { "id": 200, name: "another name", "x": "z" }],
    cost = [{ "projectid": 100, "cost": 300 }, { "projectid": 100, "cost": 100 }, { "projectid": 200, "cost": 500 }],
    merged = function (p, c) {
        var o = {},
            r = p.map(function (a) {
                o[a.id] = { id: a.id, name: a.name, cost: 0 };
                return o[a.id];
            });
        c.forEach(function (a) {
            o[a.projectid].cost += a.cost;
        });
        return r;
    }(project, cost);

document.write('<pre>' + JSON.stringify(merged, 0, 4) + '</pre>');

答案 1 :(得分:1)

一些伪代码:

var projects = null;
$http.get('API/projects').then(function(response) {
        projects = JSON.parse(response.data);
        $http.get('API/costs').then(function(response) {
            var costs = JSON.parse(response.data);
            projects.forEach(function(project) {
                var sum = 0;
                costs.forEach(function(cost) {
                    if (project.id === cost.projectid) {
                        sum += cost.cost;
                    }
                });
                project.cost = sum;
            });
        };
    });
console.log(projects);

应该进行一些调整。 可能会更优雅......