如何从 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
中的每一项,我们用合并函数 将其与当前值合并
- 组合函数从当前值中删除项目
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
中的每一项,我们用合并函数 将其与当前值合并
- 组合函数从当前值中删除项目