我对此表示感谢。我对.filter的理解是,如果找到任何内容,它将使用过滤后的数据创建一个全新的数组。我有一段代码:
const pieChartData = data.reduce((newList, item) => {
const {chg_organization_zChgManager_combo_name} = item;
const hasName = newList.filter(item => item.name === chg_organization_zChgManager_combo_name);
if (hasName.length > 0) {
hasName[0].value++;
return [...newList, ...hasName];
} else {
return [...newList, {'name': chg_organization_zChgManager_combo_name, 'value': 1}]
}
}, []);
这会中断并进入一个巨大的无穷循环。但是,如果我运行此经过稍微修改的版本,则它可以按预期运行:
const pieChartData = data.reduce((newList, item) => {
const {chg_organization_zChgManager_combo_name} = item;
const hasName = newList.filter(item => item.name === chg_organization_zChgManager_combo_name);
if (hasName.length > 0) {
hasName[0].value++;
return newList;
} else {
return [...newList, {'name': chg_organization_zChgManager_combo_name, 'value': 1}]
}
}, []);
我最初的猜测是,实际上不是创建一个全新的数组,而是创建一个实例,并且在修改数组的实例时,它修改了创建实例的数组(因此像我尝试的那样可变地而不是不变地修改它)要做)。
此reduce函数将获取一个对象数组并构建一个新的对象数组,这些对象最终将为chg_organization_zChgManager_combo_name显示的每个事件创建一个值,因此我们可以建立一个图表来确定分配给该经理的项目数。 >
感谢任何反馈,因为我真的希望该代码的第一个版本能够按预期工作。