[英]Looping with Javascript
我是編程新手。 您可以在下面的代碼中看到明顯的冗余。 我該如何用循環來編寫? 基本上只需要計數到8,然后將其加到變量名即可。 真的不能很好地掌握循環的手。
function TodoCtrl($scope) {
$scope.funding = { startingEstimate: <?=$dataitem['incomeone'];?> };
$scope.funding2 = { startingEstimate: <?=$dataitem['incometwo'];?> };
$scope.funding3 = { startingEstimate: <?=$dataitem['incomethree'];?> };
$scope.funding4 = { startingEstimate: <?=$dataitem['incomefour'];?> };
$scope.funding5 = { startingEstimate: <?=$dataitem['incomefive'];?> };
$scope.funding6 = { startingEstimate: <?=$dataitem['incomesix'];?> };
$scope.funding7 = { startingEstimate: <?=$dataitem['incomeseven'];?> };
$scope.funding8 = { startingEstimate: <?=$dataitem['incomeeight'];?> };
computeNeeded = function() {
$scope.funding.total =
($scope.funding.startingEstimate|0) +
($scope.funding2.startingEstimate|0) +
($scope.funding3.startingEstimate|0) +
($scope.funding4.startingEstimate|0) +
($scope.funding5.startingEstimate|0) +
($scope.funding6.startingEstimate|0) +
($scope.funding7.startingEstimate|0) +
($scope.funding8.startingEstimate|0);
};
$scope.$watch('funding.startingEstimate', computeNeeded);
$scope.$watch('funding2.startingEstimate', computeNeeded);
$scope.$watch('funding3.startingEstimate', computeNeeded);
$scope.$watch('funding4.startingEstimate', computeNeeded);
$scope.$watch('funding5.startingEstimate', computeNeeded);
$scope.$watch('funding6.startingEstimate', computeNeeded);
$scope.$watch('funding7.startingEstimate', computeNeeded);
$scope.$watch('funding8.startingEstimate', computeNeeded);
}
從您的PHP和$dataitem
對象開始。 似乎那應該只是一個數組,讓索引處理數字而不是incomeone
, incometwo
等鍵。 然后,您可以簡單地使用PHP的json_encode函數將它們序列化為您的JavaScript可以使用的東西。 因此,在JavaScript頂部執行以下操作:
$scope.funding.startingEstimates = <?=json_encode($dataitem);?>;
...這將為您提供以下信息:
["100", "200", "300"]
現在,您可以輕松地進行迭代,但是對於您而言,您要做的就是對值求和。 您可以使用reduce()而不是循環來實現:
computeNeeded = function(){
$scope.funding.total = $scope.funding.startingEstimates.reduce(
function(a, b){
return a + b;
}
);
}
您的$scope.$watch
函數可以如下循環:
for(var i = 0; i < $scope.funding.startingEstimates.length; i++){
$scope.$watch($scope.funding.startingEstimates[i], computeNeeded);
}
現在,您在原始PHP $dataitem
數組中所做的任何更改都將由JavaScript接收,而無需進行任何額外的修改。 現在,在PHP中進行的任何更改都需要對JavaScript進行三處更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.