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

如何基于字符串数组过滤包含type字段的嵌套对象数组

实现方案

你之前的写法存在两个核心问题:

  1. data.someData是数组,不能直接访问.someNestedData属性,需要先遍历someData的每一项
  2. indexOf返回的是匹配元素的下标,不是布尔判断值,且用数组的indexOf/includes做存在性判断性能低于Set结构

最优性能实现

首先将匹配的类型数组转为Set结构,降低单次类型匹配的时间复杂度:

const types = ['type1', 'type2'];
const typeSet = new Set(types);

遍历并过滤原数据:

const result = {
  someData: data.someData.map(outerItem => {
    // 浅拷贝外层对象,避免修改原数据
    return {
      ...outerItem,
      // 过滤嵌套数组,仅保留匹配type的元素
      someNestedData: outerItem.someNestedData.filter(innerItem => typeSet.has(innerItem.type))
    }
  })
  // 如果需要过滤掉嵌套数组为空的外层项,可去掉下面这行的注释
  // .filter(outerItem => outerItem.someNestedData.length > 0)
};

性能说明

  • 类型匹配复杂度从O(k)(k为types数组长度)降到O(1),types长度越大性能提升越明显
  • 整体时间复杂度为O(N),N为所有嵌套元素的总数量,是该场景下的最优时间复杂度,没有冗余遍历

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:33:00