快速数组过滤器多维数组

时间:2019-08-15 10:50:32

标签: ios arrays swift

我正在尝试在数组条件下过滤掉数组

public struct SalesDO: Entity {
   public var ID: String = UUID().uuidString
   public var isDeleted: Bool = false
   public var salesItems = [SalesItemDO]()
}

public struct SalesItemDO: Entity {
   public var ID: String = UUID().uuidString
   public var isDeleted: Bool = false
   public var modifiers = [SalesItemModifierDO]()
}

public struct SalesItemModifierDO: Entity {
   public var ID: String = UUID().uuidString
   public var isDeleted: Bool = false
}

我想要实现的是过滤掉那些未删除的SalesItem,以及里面同样没有删除的salesItem修饰符

我尝试使用Swift过滤器数组函数,但这是编译器错误

let rawSales = self.service.getSales(object: SalesDO()) as? SalesDO
if var sales = rawSales {
   let filteredSalesItem = sales.salesItems.filter({$0.modifiers.filter({$0.isDeleted == false})})
}.filter({$0.isDeleted == false})

我也尝试过此代码

// It becomes SalesItemModifierDO array
let filteredsales = sales.salesItems.flatMap({$0.modifiers.filter({$0.wbDeleted == false})}).filter({$0.wbDeleted == false})

例如

Item A is not deleted
   => Modifier 1
   => Modifier 2
   => Modifier 3 : Deleted
Item B is deleted 
   => Modifier 1
   => Modifier 2

我正在尝试实现仅显示带有两个修饰符的项A的功能,因为修饰符3已被删除。

有人可以指导我所缺少的吗?给予的任何帮助都将受到高度赞赏。谢谢

1 个答案:

答案 0 :(得分:1)

您可以过滤数组以删除已删除的销售项目,然后映射其余项目以删除已删除修饰符的修饰符。

let filteredSalesItem = sales.salesItems.filter({ !$0.isDeleted }).map { (item) -> SalesItemDO in
    var newItem = item // Need to make mutable interim item to change modifiers array
    newItem.modifiers = newItem.modifiers.filter({ !$0.isDeleted })
    return newItem
}