[英]Transferring Properties from one to another object based on the value of another property
我有一个小问题。 我正在开发一个有角度的应用程序,并在某个时候从api获取一些数据。
我有一个带有项目url的现有对象,并且正在获取一组timelip对象,它们本身具有一个小时属性和一个项目urls属性,以指示它们属于哪个项目。
我想要达到的目的是遍历我获得的所有时间单,以便将小时数转移到具有匹配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创建小时属性,而只是将当前时间戳的小时数添加到先前已经存在的小时数中添加。
如果有人可以在这里指出我的错误,那太好了,因为我似乎找不到它。
非常感谢!
更改:
if ($scope.projectsObject[ii].url == timeslip.project) {
至:
if ($scope.projectsObject[ii].url == timeslip.project.url) {
我建议使用更简洁的代码。
发生了什么变化:
response.data.timeslips
迭代。 $scope.projectsObject
迭代。 url
是否相等。 b.hours
,则提供默认值0
。 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>');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.