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

如何根据状态数组过滤包含全部指定true键的事件对象?

解决方案

核心需求:根据用户选择的年龄分组数组(如['youth', 'college']),筛选出**所有数组元素对应的ageDivisions键值均为true**的事件对象。

简化过滤逻辑

不需要把ageDivisions转成二维数组,直接用数组的every()方法就能高效完成校验:

  • 遍历过滤数组中的每个键
  • 确保事件的ageDivisions中该键存在且值为true

修改后的完整代码

if (filterParamaters.ageDivisions && filterParamaters.ageDivisions.length > 0) {
  let parsedEvents = events.data.map(({ attributes: event }) => {
    return {
      ...event,
      ...event.attributes,
      ageDivisions: JSON.parse(event.ageDivisions),
      eventStyles: JSON.parse(event.eventStyles),
    };
  });

  filteredEventss = parsedEvents.filter((event) => {
    // 先确保event.ageDivisions是有效对象,避免报错
    if (!event.ageDivisions || typeof event.ageDivisions !== 'object') {
      return false;
    }
    // 核心校验:过滤数组的所有键在事件中都必须为true
    return filterParamaters.ageDivisions.every(division => {
      return event.ageDivisions[division] === true;
    });
  });

  console.log({ filteredEventss });
}

代码说明

  1. 边界处理:先判断过滤参数是否有效,同时校验事件的ageDivisions是否为合法对象,避免运行时报错。
  2. 核心校验逻辑:every()方法会逐一检查过滤数组中的每个元素,只有当所有元素对应的ageDivisions值都是true时,该事件才会被保留。
  3. 效率优化:直接访问对象属性的方式比转二维数组更高效,代码也更简洁易读。

举个例子:针对你给出的示例事件对象,若过滤数组是['youth', 'college'],该事件会被保留;若过滤数组是['youth', 'open'],则会被排除(因为open对应的值是false)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:48:46