Javascript 添加嵌套对象的值

Javascript 添加嵌套对象的值,javascript,angularjs,Javascript,Angularjs,我有一个包含多个对象的对象。每个对象都有一个高度和一个宽度,我需要把它们加在一起得到总的高度和宽度。我需要更新用户输入的总数 对象: $scope.myObj = { wall1: { wFeet: 0, wInches: 0, hFeet: 0, hInches: 0, totalWidth: 0, totalHeight: 0 }, wall2: { wFeet: 0, wInches: 0, hFeet:

我有一个包含多个对象的对象。每个对象都有一个高度和一个宽度,我需要把它们加在一起得到总的高度和宽度。我需要更新用户输入的总数

对象:

$scope.myObj = {
  wall1: {
    wFeet: 0,
    wInches: 0,
    hFeet: 0,
    hInches: 0,
    totalWidth: 0,
    totalHeight: 0
  },
  wall2: {
    wFeet: 0,
    wInches: 0,
    hFeet: 0,
    hInches: 0,
    totalWidth: 0,
    totalHeight: 0
  },
  wall3: {
    wFeet: 0,
    wInches: 0,
    hFeet: 0,
    hInches: 0,
    totalWidth: 0,
    totalHeight: 0
  }
};
现在我有一个函数,它获取英尺和英寸的值,转换为十进制英尺,然后将它们相加,得到每面墙的总宽度和高度

    $scope.setTotalWidthAndHeight = function() {
      angular.forEach($scope.walls, function(wall) {

        //first convert inches to decimal of ft
        angular.forEach(wall, function(dim, dimKey) {

          if(dimKey === 'wInches') {
            wall.wallWidth = wall.wFeet + (0.0833 * dim);
          }

          if(dimKey === 'hInches') {
            wall.wallHeight = wall.hFeet + (0.0833 * dim);
          }

        })
      });
    };
我现在遇到的问题是将每个对象的所有
totalWidth
totalHeight
值相加,得到所有墙的最终宽度和高度。必须有比下面更好的方法来做

例如:

var allTotalWidths = $scope.myObj.wall1.totalWidth + $scope.myObj.wall2.totalWidth + $scope.myObj.wall3.totalWidth;

您的函数可以进行一些优化,我将假设您当前在哪里获得了
wall.wallWidth=
wall.wallHeight=
您想要的是
wall.totalWidth=
wall.totalHeight=
,因为前面的属性在示例数据中不存在,并且可能会引发错误

var totalWidths = 0,
    totalHeights = 0;

$scope.setTotalWidthAndHeight = function()
{
    angular.forEach($scope.walls, function(wall)
    {
        wall.totalWidth = wall.wFeet + (0.0833 * wall.wInches);
        wall.totalHeight = wall.hFeet + (0.0833 * wall.hInches);

        totalWidths += wall.totalWidth;
        totalHeights += wall.totalHeight;
    });
};
我已经改变了你的功能,一下子完成了所有的合计。它将填充初始对象的
totalWidth/Height
属性,并在
totalWidths
totalHeights
变量中保留所有宽度和高度的运行总数