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

如何在JavaScript中按指定键过滤数组中的对象?

嘿,这个需求在JavaScript里用Array.filter()就能轻松搞定,我结合你给出的事件数组,拆解几种常见的过滤场景,你可以按需选用:

1. 基础场景:按单个键的固定值匹配

如果只是想筛选某个键等于特定值的对象,直接在filter的回调里做相等判断就行。比如要找出所有eventType为craft的事件:

const events = [ 
  { "startDay": "05-06", "endDay": "05-06", "startTime": "xxxx", "eventType": "craft" }, 
  { "startDay": "05-05", "endDay": "05-06", "startTime": "1400", "eventType": "art" }, 
  { "startDay": "05-08","endDay": "05-08", "startTime": "1100", "eventType": "music" }, 
  { "startDay": "05-08","endDay": "05-08", "startTime": "1400", "eventType": "fishing" }, 
  { "startDay": "05-07","endDay": "05-08", "startTime": "1400", "eventType": "football" } 
];

// 筛选eventType为craft的事件
const craftEvents = events.filter(event => event.eventType === "craft");
console.log(craftEvents);
// 输出:[{ "startDay": "05-06", "endDay": "05-06", "startTime": "xxxx", "eventType": "craft" }]
2. 组合场景:按多个键的条件匹配

要是需要同时满足多个键的条件,比如筛选5月8日当天完成(startDay和endDay都是05-08)的事件,就用逻辑运算符把条件组合起来:

// 筛选5月8日当天的事件
const may8SameDayEvents = events.filter(event => 
  event.startDay === "05-08" && event.endDay === "05-08"
);
console.log(may8SameDayEvents);
// 输出:包含music和fishing的两个对象
3. 复杂场景:处理跨范围的键值匹配

像你数组里的football事件是跨05-07到05-08的,如果要筛选所有覆盖5月8日的事件(不管是当天还是跨天到当天),得先把日期转成可比较的格式,再做范围判断:

// 辅助函数:把MM-DD格式的日期转成数字(比如05-08转成508),方便比较
const dateToNumber = dateStr => parseInt(dateStr.replace("-", ""));

// 筛选所有覆盖05-08的事件
const coversMay8Events = events.filter(event => {
  const startDateNum = dateToNumber(event.startDay);
  const endDateNum = dateToNumber(event.endDay);
  const targetDateNum = dateToNumber("05-08");
  // 只要开始日期≤目标日期,且结束日期≥目标日期,就说明覆盖了目标日期
  return startDateNum <= targetDateNum && endDateNum >= targetDateNum;
});
console.log(coversMay8Events);
// 输出:包含music、fishing、football的三个对象
4. 通用场景:动态指定键和过滤条件

如果想写一个复用性强的函数,支持动态传入要过滤的键和判断逻辑,可以这样封装:

function filterByKey(events, targetKey, conditionFn) {
  return events.filter(event => conditionFn(event[targetKey]));
}

// 用法示例1:筛选startTime为1400的事件
const startTime1400Events = filterByKey(events, "startTime", val => val === "1400");
// 用法示例2:筛选startDay晚于05-06的事件
const afterMay6Events = filterByKey(events, "startDay", val => dateToNumber(val) > 506);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:01:31