Javascript 修改过滤数组会导致修改原始数组
我很感激对这方面的任何见解。我对.filter的理解是,若它找到任何数据,它将创建一个全新的数组,其中包含过滤后的数据。我有一段代码:Javascript 修改过滤数组会导致修改原始数组,javascript,arrays,filter,Javascript,Arrays,Filter,我很感激对这方面的任何见解。我对.filter的理解是,若它找到任何数据,它将创建一个全新的数组,其中包含过滤后的数据。我有一段代码: const pieChartData = data.reduce((newList, item) => { const {chg_organization_zChgManager_combo_name} = item; const hasName = newList.filter(item => item.name =
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_名称显示的每个事件创建一个值,以便我们可以构建一个图表,显示分配给所述经理的项目数量
我非常感谢您的反馈,因为我真的希望代码的第一个版本能够按预期工作。
.filter()
创建一个新数组。但是如果元素是对象,它们是对相同对象的引用,它不会进行深度复制。我明白了,谢谢你。那么,这是否意味着我必须创建一个新变量并将对象分配给它,以便不可变地修改它?或者在这一点上是不可能的?看到了吗