Javascript 基于另一个特性的值将特性从一个对象传输到另一个对象

Javascript 基于另一个特性的值将特性从一个对象传输到另一个对象,javascript,angularjs,object,Javascript,Angularjs,Object,我有个小问题。我正在开发一个angular应用程序,在某个点上,我从api获得了一些数据 我有一个带有项目URL的现有对象,并且得到一个timeslip对象数组,这些对象本身有一个小时属性和一个项目URL属性,以指示它们属于哪个项目 我试图实现的是迭代我得到的所有时间间隔,以便将小时数传输到具有匹配url属性的项目数组中的项目 项目数组为:$scope.projectsObject 我的代码如下所示: for (var i = 0; i < response.data.timeslips.

我有个小问题。我正在开发一个angular应用程序,在某个点上,我从api获得了一些数据

我有一个带有项目URL的现有对象,并且得到一个timeslip对象数组,这些对象本身有一个小时属性和一个项目URL属性,以指示它们属于哪个项目

我试图实现的是迭代我得到的所有时间间隔,以便将小时数传输到具有匹配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属性,而只是将当前时间间隔的小时数添加到先前添加的小时数中

如果有人能在这里指出我的错误那就太好了,因为我似乎找不到它

非常感谢

变化:

if ($scope.projectsObject[ii].url == timeslip.project) {
致:


我建议使用更简洁的代码

发生了什么变化:

response.data.timeslip的迭代。 $scope.projectsObject的迭代。 测试两个对象中的属性url是否相等。 如果未设置b.hours,则提供默认值0。 将timeslip.hours从字符串转换为数字。 添加值。 将新值指定给b.hours,并保持对象b的其余部分不变。 var response={data:{timeslip:[{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.timeslip.forEachfunction timeslip{ $scope.projectsObject.forEachfunction b{ 如果timeslip.url==b.url{ b、 小时=b.hours | | 0++timeslip.hours; } }; };
文件。书写;能否从response.data.timeslip和$scope.projectsObject提供一些数据?为什么要使用$scope.projectsObject[ii]={hours:timeslip.hours};何时可以执行此操作$scope.projectsObject[ii].hours=timeslip.hours;?另一种方法是删除$scope.projectsObject[ii].url,而不是$scope.projectsObject[ii]中的if'hours'。您是否尝试过if$scope.projectsObject[ii].hasOwnProperty'hours'?如果没有足够的代码和数据样本进行复制,这里的任何人都很难调试。创建一个简单的演示,人们可以在代码中设置断点进行调试,这样您就可以看到每个步骤的内容。response.data.timeslip的示例:[{hours:7.0,url:https://api.sample.com},{小时数:2.5,网址:https://api.sample1.com},{小时数:0.5,网址:https://api.sample2.com},…]以$scope.projectsObject为例:[{url:https://api.sample1.com},{url:https://api.sample.com},{url:https://api.sample2.com},...]现在,我想根据url将小时数移动到另一个数组中相应的项目对象。我尝试使用hasOwnProperty,但没有更改任何内容…哦,是的!抱歉,这是一个输入错误。不幸的是,代码仍然不起作用:我想timeslip.hours仍然需要使用parseFloat将其解析为浮点。不确定是什么原因t++timeslip.hours确实如此。将值转换为number,请参见上面的代码段结果
if ($scope.projectsObject[ii].url == timeslip.project.url) {