我有一个小问题。我正在开发一个角度应用程序,在某些时候我从api获得了一些数据。
我有一个带有项目网址的现有对象,我正在获取一个具有小时属性和项目网址属性的时间夹对象数组,以指示它们属于哪个项目。
我想要实现的是迭代我获得的所有时间片,以便将项目数组中的小时数转移到具有匹配url属性的项目中。
项目数组是:$ scope.projectsObject
我的代码如下所示:
for (var i = 0; i < response.data.timeslips.length; i++) {
//SET LOCAL VARIABLE FOR SELECTED TIMESLIP
var timeslip = response.data.timeslips[i];
//ITERATE THROUGH PROJECTS ARRAY
for (var ii = 0; ii < Object.keys($scope.projectsObject).length; ii++) {
//SEE IF TIMESLIP BELONGS TO PROJECT
if ($scope.projectsObject[ii].url == timeslip.url) {
//SEE IF $scope.projectsObject HAS HOURS PROPERTY
if ('hours' in $scope.projectsObject[ii]) {
//IF YES ADD HOURS TO EXISTING AMOUNT
$scope.projectsObject[ii].hours = $scope.projectsObject[ii].hours + timeslip.hours;
} else {
//IF NOT CREATE IT AND ADD HOURS
$scope.projectsObject[ii] = { "hours": timeslip.hours };
}
}
}
}
问题似乎在于识别以前的时间片已经添加到项目中的时间,并且我不想从new创建hours属性,但只需将当前时间片的小时数添加到以前已添加的小时数。
如果有人能在这里指出我的错误,那将会很棒,因为我似乎无法找到它。
非常感谢!
答案 0 :(得分:0)
变化:
if ($scope.projectsObject[ii].url == timeslip.project) {
为:
if ($scope.projectsObject[ii].url == timeslip.project.url) {
答案 1 :(得分:0)
我建议使用更简洁的代码。
发生了什么变化:
response.data.timeslips
的迭代。$scope.projectsObject
的迭代。url
是否相等。0
,请提供默认值b.hours
。timeslip.hours
从String
转换为Number
。b.hours
(并保留对象b的其余部分)。
var response = { data: { timeslips: [{ "hours": "7.0", "url": "api.sample.com" }, { "hours": "2.5", "url": "api.sample1.com" }, { "hours": "3.1", "url": "api.sample1.com" }, { "hours": "0.5", "url": "api.sample2.com" }] } },
$scope = { projectsObject: [{ "url": "api.sample1.com" }, { "url": "api.sample.com" }, { "url": "api.sample2.com" }] };
response.data.timeslips.forEach(function (timeslip) {
$scope.projectsObject.forEach(function (b) {
if (timeslip.url === b.url) {
b.hours = (b.hours || 0) + +timeslip.hours;
}
});
});
document.write('<pre>' + JSON.stringify($scope, 0, 4) + '</pre>');