如何修改JS代码,移除对象数组中连续同type超2的对象并收集移除项
处理连续重复对象的数组过滤需求
需求描述
需要对对象数组完成以下处理:
- 移除所有type属性相同且连续出现数量超过2个的对象
- 被移除的对象需单独收集到一个数组中
示例
原始数组:
[ { type: 'joined', name: 'test', }, { type: 'joined', name: 'test 1', }, { type: 'left', name: 'test 2', }, { type: 'joined', name: 'test 3', }, { type: 'joined', name: 'test 4', }, { type: 'joined', name: 'test 5', }, { type: 'joined', name: 'test 6', }, { type: 'joined', name: 'test 7', } ]
处理后保留的数组:
[ { type: 'joined', name: 'test', }, { type: 'joined', name: 'test 1', }, { type: 'left', name: 'test 2', } ]
被移除的数组:
[ { type: 'joined', name: 'test 3' }, { type: 'joined', name: 'test 4' }, { type: 'joined', name: 'test 5' }, { type: 'joined', name: 'test 6' }, { type: 'joined', name: 'test 7' } ]
修改参考代码实现需求
你提供的代码已经完成了连续同类型对象的分组,只需要在分组后增加阈值判断,即可实现需求:
const originalArray = [ { type: 'joined', name: 'test' }, { type: 'joined', name: 'test 1' }, { type: 'left', name: 'test 2' }, { type: 'joined', name: 'test 3' }, { type: 'joined', name: 'test 4' }, { type: 'joined', name: 'test 5' }, { type: 'joined', name: 'test 6' }, { type: 'joined', name: 'test 7' } ]; let currentType; let groupedItems = []; // 第一步:完成连续同type对象的分组 for (const item of originalArray) { if (item.type !== currentType) { groupedItems.push([]); currentType = item.type; } groupedItems[groupedItems.length - 1].push(item); } // 第二步:根据阈值过滤分组,分离保留和移除的对象 const keptArray = []; const removedArray = []; const MAX_ALLOWED = 2; // 允许的最大连续数量 for (const group of groupedItems) { if (group.length > MAX_ALLOWED) { removedArray.push(...group); } else { keptArray.push(...group); } } console.log('保留的数组:', keptArray); console.log('被移除的数组:', removedArray);
代码说明
- 分组阶段:沿用你提供的逻辑,将连续同
type的对象归为一组 - 过滤阶段:遍历每个分组:
- 若分组长度超过2,将整个分组对象移入移除数组
- 若分组长度≤2,将整个分组对象移入保留数组
- 如需调整允许的连续数量,直接修改
MAX_ALLOWED的值即可
内容的提问来源于stack exchange,提问作者cycero
相关产品推荐
相关产品推荐

