You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按非重叠键过滤对象数组?

解决方法

核心逻辑

遍历数组时记住上一个保留元素的结束值,对每个当前元素,解析出它的起始值,若起始值和上一个元素的结束值相等则过滤掉,否则保留该元素并更新记录的结束值。

代码实现

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"}]

步骤解释

  1. 初始化空数组filteredArray存储结果,prevEnd用于记录上一个保留元素的结束值,初始设为null
  2. 遍历原数组,每个对象取出唯一的键(适配题目中每个对象只有一对键值的结构)
  3. 将键按-分割成起始和结束数字,对比当前起始值与prevEnd
  4. 第一个元素直接加入结果数组;后续元素只有起始值不等于prevEnd时才加入,同时更新prevEnd为当前元素的结束值

内容的提问来源于stack exchange,提问作者hasina rajik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:37:05