ฉันมีสิ่งนี้:
$scope.traveler = [
{ description: 'Senior', Amount: 50},
{ description: 'Senior', Amount: 50},
{ description: 'Adult', Amount: 75},
{ description: 'Child', Amount: 35},
{ description: 'Infant', Amount: 25 },
];
ตอนนี้มีจำนวนทั้งหมดของอาร์เรย์นี้ฉันทำอะไรแบบนี้:
$scope.totalAmount = function(){
var total = 0;
for (var i = 0; i < $scope.traveler.length; i++) {
total = total + $scope.traveler[i].Amount;
}
return total;
}
มันง่ายเมื่อมีเพียงอาร์เรย์เดียว แต่ฉันมีอาร์เรย์อื่นที่มีชื่อคุณสมบัติอื่นที่ฉันต้องการรวม
ฉันจะมีความสุขมากขึ้นถ้าฉันสามารถทำสิ่งนี้:
$scope.traveler.Sum({ Amount });
แต่ฉันไม่รู้ว่าจะผ่านสิ่งนี้ไปได้อย่างไรในอนาคตฉันสามารถนำมันกลับมาใช้ใหม่ได้:
$scope.someArray.Sum({ someProperty });
ตอบ
ฉันตัดสินใจใช้คำแนะนำ @ gruff-bunny ดังนั้นฉันจึงหลีกเลี่ยงการสร้างต้นแบบวัตถุพื้นเมือง (Array)
ฉันเพิ่งแก้ไขคำตอบของเขาเพื่อตรวจสอบความถูกต้องของอาเรย์และมูลค่ารวมไม่เป็นโมฆะนี่คือการนำไปใช้ครั้งสุดท้าย
$scope.sum = function (items, prop) {
if (items == null) {
return 0;
}
return items.reduce(function (a, b) {
return b[prop] == null ? a : a + b[prop];
}, 0);
};