我有这样的东西:
$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 });
经过这些回答后,我认为实际上一个for(或forEach或for of with await)循环比reduce甚至map和reduce更具可读性。
认为:
在6个月后回到这段代码或者由其他人维护它。我认为你使用循环的方法已经足够好了。
在将来扩展这个函数,以防您想要添加货币转换或类似的功能。在一行代码中执行此操作并不是一个好主意。
Var traveler = [
{数量:50,描述:'高级'},
{数量:50,描述:'高级'},
{数量:75,描述:“成人”},
{数量:35,描述:'Child'},
{数量:25,描述:“婴儿”}
];
var sumFromArray = (propertyName, array) => {
设sum = 0;
数组中。forEach(item => {
sum += item[propertyName] ?0;
});
返回总和;
};
var sumOfTraveler = sumFromArray('Amount', traveler);
console.log (sumOfTraveler);
使用类型你的函数定义可能像这样:
const sumFromArray = (propertyName: string, array: Array<{[propertyName: string]: number}>) => { ... };
类型文字中的计算属性名必须直接引用内置符号
我没有反对地图,减少或单行,这只是思考的食物。
如何使用Javascript和对象数组
const traveler = [
{ description: 'Senior', Amount: 50},
{ description: 'Senior', Amount: 50},
{ description: 'Adult', Amount: 75},
{ description: 'Child', Amount: 35},
{ description: 'Infant', Amount: 25 }
];
Const traveler = [
{描述:'高级',数量:50},
{描述:'高级',数量:50},
{描述:“成人”,数量:75},
{描述:'Child',数量:35},
{描述:“婴儿”,数量:25},
];
函数sum(arrayData, key){
返回arrayData.reduce((a,b) => {
返回{金额:a.金额+ b.金额}
})
}
console.log(总和(旅行)
`
使用reduce和解构来求和
const traveler = [
{ description: 'Senior', Amount: 50 },
{ description: 'Senior', Amount: 50 },
{ description: 'Adult', Amount: 75 },
{ description: 'Child', Amount: 35 },
{ description: 'Infant', Amount: 25 },
];
console.log(traveler.reduce((n, {Amount}) => n + Amount, 0))