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

Swift中嵌套数组筛选isSelected为true的分类数据如何实现?

问题分析

你现有代码的核心问题是用错了高阶函数:flatMap会把每个遍历元素返回的数组直接打平合并,你直接返回过滤后的SubCategory数组,最终结果自然是所有选中子分类的一维集合,完全丢失了外层category_name的结构信息。

实现代码

你可以用compactMap配合子数组过滤实现需求,代码如下:

let filtered = itemModelArray.compactMap { item in
    // 过滤当前分类下所有选中的子分类
    let selectedSubs = item.sub_category.filter { $0.isSelected }
    // 没有选中子分类的外层分类直接丢弃
    guard !selectedSubs.isEmpty else { return nil }
    // 生成新的Item实例,保留原有分类名,替换为过滤后的子分类数组
    return Item(cat: item.category_name, subCat: selectedSubs)
}
代码逻辑说明
  • compactMap会自动丢弃返回为nil的元素,刚好可以把没有选中子分类的外层分类(比如你示例中category_name为空的分类)直接排除
  • 每个遍历步骤都生成了新的Item对象,完全保留了原有category_name结构,仅将sub_category替换为过滤后的选中子分类数组,不会拉平结构
  • 最终返回值是[Item]类型,和你原数组的结构完全一致,符合预期输出要求
注意事项

你原代码里写的item.subCategory!和模型定义的属性名sub_category不一致,注意修正属性名拼写,避免出现运行时错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:54:03