【发布时间】:2015-09-29 15:15:06
【问题描述】:
我有一个小问题。我正在开发一个角度应用程序,并且在某些时候我从 api 获取一些数据。
我有一个带有项目 url 的现有对象,并且正在获取一个包含 hours 属性和项目 urls 属性的 timeslip 对象数组,以指示它们属于哪个项目。
我想要实现的是遍历我获得的所有时间片,以便将小时数转移到具有匹配 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 };
}
}
}
}
问题似乎在于识别上一个时间片的小时数何时已添加到项目中,我不想从新创建小时属性,而只是将当前时间片的小时数添加到之前已经添加了。
如果有人能在这里指出我的错误,那就太好了,因为我似乎找不到它。
非常感谢!
【问题讨论】:
-
你能提供一些来自
response.data.timeslips和$scope.projectsObject的数据吗?当你可以做到$scope.projectsObject[ii].hours = timeslip.hours;时,你为什么要$scope.projectsObject[ii] = { "hours": timeslip.hours };?另一种方式删除($scope.projectsObject[ii].url。 -
而不是
if('hours' in $scope.projectsObject[ii]),如果($scope.projectsObject[ii].hasOwnProperty('hours')),你试过了吗?? -
如果没有足够的代码和数据样本来复制,这里的任何人都很难调试。创建一个人们可以调试的简单演示
-
在代码中也设置断点,这样你就可以看到每一步是什么
-
response.data.timeslips 的示例:
[{"hours":"7.0","url":"https://api.sample.com"},{"hours":"2.5","url":"https://api.sample1.com"},{"hours":"0.5","url":"https://api.sample2.com"},...]$scope.projectsObject 的示例:[{"url": "https://api.sample1.com"},{"url": "https://api.sample.com"},{"url": "https://api.sample2.com"},...]我现在想根据网址。我尝试使用 hasOwnProperty 并没有改变任何东西......
标签: javascript angularjs object