如何从 JsObject 中删除 Seq[String]?

How to delete Seq[String] from JsObject?

private def updateData(
  oldData: Seq[Data], 
  authorised: Boolean, 
  removeItemList: Seq[String]
): Seq[Data] = {
    if (!authorised) {
      oldData.map { data =>
        val props: Option[JsObject] = data.props.map { 
          props => props.as[JsObject] - removeItemList(0) - removeItemList(1) - removeItemList(2) 
        }
        data.copy(props = props)
      }
    } else {
      oldData
    }
  }

我们可以改进这段代码吗?所以它适用于 removeItemList 长度 > 3.

诀窍是,对于 removeItemList 中的每个项目,将其从上次删除产生的 JsObject 中删除。

这是 fold:

的定义
removeItemList.foldLeft(props.as[JsObject]) { (jso, v) => jso - v }
  • 我们使用props.as[JsObject]作为起始值
  • 对于removeItemList中的每一项,我们用合并函数
  • 将其与当前值合并
  • 组合函数从当前值中删除项目