我有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
}
]
由于
答案 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);
应该进行一些调整。 可能会更优雅......