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
变量中保留所有宽度和高度的运行总数