繁体   English   中英

根据另一个属性的值将属性从一个对象传输到另一个对象

[英]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.hoursString转换为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM