2015-10-13 120 views
-2

我想总结两个对象为一个总体对象,并获得两个值的百分比变化(然后除以值的数量)。我在应用这个逻辑时遇到了一些问题。数据是动态的,因此同一个数组中可能有两个以上的对象。JavaScript - 合并/合并数组中的多个对象

我的首选方法是JavaScript,但如果它更简单,jQuery也是完美的!下面是一个例子,这里是一个的jsfiddle - http://jsfiddle.net/4z63cwhz/4/

响应数据:

$scope.data = [ 
     { 
      "July":{ 
      "params":{ 
       "frequency":"Monthly", 
       "category":"Overview", 
       "year":"2015", 
       "month":"July" 
      }, 
      "subcategory":{ 
       "us total":{ 
        "interaction rate":0.51, 
        "digital interaction rate":8.33, 
        "impressions":500, 
        "interactions":256 
       }, 
       "discover me":{ 
        "digital u.s. discover site sessions":50 
       }, 
       "me com":{ 
        "total me.com site sessions":50 
       } 
      }, 
      "action":"new" 
      }, 
      "August":{ 
      "params":{ 
       "frequency":"Monthly", 
       "category":"Overview", 
       "year":"2015", 
       "month":"August" 
      }, 
      "subcategory":{ 
       "us total":{ 
        "interaction rate":0.51, 
        "digital interaction rate":8.33, 
        "impressions":500, 
        "interactions":256 
       }, 
       "discover me":{ 
        "digital u.s. discover site sessions":50 
       }, 
       "me com":{ 
        "total me.com site sessions":50 
       } 
      }, 
      "action":"new" 
      } 
     } 
    ] 

JS:

$scope.calculate = function(){ 
     var sumObj = {}; 


     var local = $scope.data; 
     for(var i in local){ 
      var obj = local[i]; 
      for(var i2 in obj){ 
       for(var i3 in obj[i2].subcategory){ 
        //do the calculation here. 
        console.log(i3); 

       } 
      } 

     } 
    }; 

sumObj我希望能得到将类似于如下:

{ 
    "us total":{ 
     "interaction rate":{ 
      total: total#, 
      '%change': %change 
     }, 
     "digital interaction rate":{ 
      total: total#, 
      '%change': %change 
     }, 
     "impressions":{ 
      total: total#, 
      '%change': %change 
     }, 
     "interactions":{ 
      total: total#, 
      '%change': %change 
     } 
    }, 
    "discover me":{ 
     "digital u.s. discover site sessions":{ 
      total: total#, 
      '%change': %change 
     } 
    }, 
    "me com":{ 
     "total me.com site sessions":{ 
      total: total#, 
      '%change': %change 
     } 
    } 
} 

在此先感谢!

+0

目前尚不清楚你要添加什么。请显示您想要添加的两个(或更多)对象的示例以及最终输出应该是什么样子。 –

+0

英里,请看看jsfiddle。两个对象的例子是响应数据,最终输出是sumObj。我已经包括了它的样子。还包括在jsfiddle中 - http://jsfiddle.net/4z63cwhz/5/ – habibg

+0

您需要简化问题以减少人们花在理解问题上的时间。我建议你删除所有不想添加的元素,并用实际结果更新sumObj。 –

回答

0

那么如果JSON对象都重复同样的格式,那么你就不能这样做:

var text= {}; 
local[current].attributeString (some calculation) local[next].attributeString += text; 

其中电流= i和未来= I + 1。

然后你可以使用:

var obj = JSON.parse(text); 

将字符串转换成JSON对象。我可能会使用某种类型的键/值对而不是字符串,但这可能有助于减少一些循环。