Javascript 返回数组中的JS Reduce第一项为null
您好,我正在使用以下功能按键分组并计算总数:Javascript 返回数组中的JS Reduce第一项为null,javascript,angular,Javascript,Angular,您好,我正在使用以下功能按键分组并计算总数: calcEquipmentTotals(){ var groups = this.inspection.equipments.reduce(function(obj,item){ obj[item.equipment_type_id] = obj[item.equipment_type_id] || { equipment_type_id: item.equipment_type_id, total: 0}; // C
calcEquipmentTotals(){
var groups = this.inspection.equipments.reduce(function(obj,item){
obj[item.equipment_type_id] = obj[item.equipment_type_id] || { equipment_type_id: item.equipment_type_id, total: 0};
// Calculate total based on action
var total = obj[item.equipment_type_id].total;
if(item.action === 'added' || item.action === 'stocktake'){
total = total + item.quantity;
}else{
total = total - item.quantity;
};
obj[item.equipment_type_id].total = total;
return obj;
},[]);
return groups;
}
这是伟大的工作,除了第一项是一个空的对象,我在这里做错了什么
[ null, { "equipment_type_id": 1, "total": 1 }, { "equipment_type_id": "2", "total": 10 } ]
这会满足你的要求
calcEquipmentTotals() {
var groups = this.inspection.equipments.reduce(function (map, item) {
const obj = map.get(item.equipment_type_id) || {
equipment_type_id: item.equipment_type_id, total: 0
};
if (item.action === 'added' || item.action === 'stocktake') {
obj.total += item.quantity;
} else {
obj.total -= item.quantity;
};
map.set(obj);
return map;
}, new Map());
return Array.from(groups.values());
}
这些评论为我指明了正确的方向,这就是它最终成功的原因:
calcEquipmentTotals(){
var groups = this.inspection.equipments.reduce(function(obj,item){
obj[item.equipment_type_id] = obj[item.equipment_type_id] || { equipment_type_id: item.equipment_type_id, total: 0};
// Calculate total based on action
var total = obj[item.equipment_type_id].total;
if(item.action === 'added' || item.action === 'stocktake'){
total = total + item.quantity;
}else{
total = total - item.quantity;
};
obj[item.equipment_type_id].total = total;
return obj;
},{});
return Object.keys(groups).map((key) => groups[key]);
}
可能没有任何项的
设备类型\u id
为0为什么初始值是数组而不是对象文字?@HikmatGurbanli,因为如果使用{}:错误:找不到类型为“object”的不同支持对象“[object object]”,我从Angular中得到此错误。NgFor只支持绑定到诸如Arrayswell之类的Iterables,然后在reduce的回调中将其视为一个数组。您不是在推送项目,而是在分配一些索引,一些索引将为空。使用对象进行分组,然后在完成分组后,使用object.keys(obj).map((key)=>obj[key])将其转换为数组。