如何按非重叠键过滤对象数组?
解决方法
核心逻辑
遍历数组时记住上一个保留元素的结束值,对每个当前元素,解析出它的起始值,若起始值和上一个元素的结束值相等则过滤掉,否则保留该元素并更新记录的结束值。
代码实现
const array = [{"0-3":"abc"},{"1-4":"abc"},{"5-8":"abc"},{"8-11":"abc"}]; const filteredArray = []; let prevEnd = null; array.forEach(item => { // 获取当前对象的唯一键(假设每个对象只有一组键值对) const key = Object.keys(item)[0]; // 拆分键的起始、结束值并转为数字 const [start, end] = key.split('-').map(Number); // 第一个元素直接保留,或当前起始值不等于上一个结束值时保留 if (prevEnd === null || start !== prevEnd) { filteredArray.push(item); prevEnd = end; } }); console.log(filteredArray); // 输出结果: [{"0-3":"abc"},{"5-8":"abc"}]
步骤解释
- 初始化空数组
filteredArray存储结果,prevEnd用于记录上一个保留元素的结束值,初始设为null - 遍历原数组,每个对象取出唯一的键(适配题目中每个对象只有一对键值的结构)
- 将键按
-分割成起始和结束数字,对比当前起始值与prevEnd - 第一个元素直接加入结果数组;后续元素只有起始值不等于
prevEnd时才加入,同时更新prevEnd为当前元素的结束值
内容的提问来源于stack exchange,提问作者hasina rajik
相关产品推荐
相关产品推荐

