如何修改Lodash groupBy生成的分组对象中所有子对象的isChanged值?
解决方案
方法一:原地修改原对象(最高效)
直接遍历对象的所有分组,修改每个子对象的isChanged属性,无需额外内存开销:
for (const date in GroupedData) { GroupedData[date].forEach(item => { item.isChanged = true; }); }
方法二:创建新对象(不修改原数据)
如果需要保留原始数据,可通过Object.fromEntries生成新对象:
const updatedData = Object.fromEntries( Object.entries(GroupedData).map(([date, items]) => [ date, items.map(item => ({ ...item, isChanged: true })) ]) );
方法三:使用Lodash实现
若仍偏好Lodash,可结合forEach或mapValues完成:
// 原地修改 _.forEach(GroupedData, items => { _.forEach(items, item => { item.isChanged = true; }); }); // 生成新对象 const updatedData = _.mapValues(GroupedData, items => _.map(items, item => ({ ...item, isChanged: true })) );
效率说明
- 原地修改的方式(方法一、Lodash原地修改版本)性能最优,因为直接操作原数据,无额外内存分配。
- 生成新对象的方式适合需要保持数据不可变的场景,但会创建新的数组和对象,内存占用略高。
内容的提问来源于stack exchange,提问作者lamsmallsmall
相关产品推荐
相关产品推荐

