javascript - Ramda 删除嵌套的空值
问题描述
我想从对象中删除所有空值。让我们假设:
const data = {
key1: 'ok',
key2: null,
key3: '', // should be removed too
key4: {
inner_key1: 'aaa',
inner_key2: null
}
}
我做的是这个
const clean = R.reject(R.either(R.isNil, R.isEmpty))
而这项工作:
{"key1":"ok","key4":{"inner_key1":"aaa","inner_key2":null}}
如您所见,除了嵌套对象,inner_key2 存在,应该被过滤掉。
使用 ramda,我怎样才能删除这个嵌套值呢?
解决方案
创建一个递归函数,在清理对象后对属性进行迭代,并在每个属性上调用 clean,这是一个对象:
const { pipe, reject, either, isNil, isEmpty, map, when, is } = R
const clean = o => pipe(
reject(either(isNil, isEmpty)),
map(when(is(Object), clean))
)(o)
const data = {"key1":"ok","key2":null,"key3":"","key4":{"inner_key1":"aaa","inner_key2":null}}
const result = clean(data)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.js" integrity="sha512-3sdB9mAxNh2MIo6YkY05uY1qjkywAlDfCf5u1cSotv6k9CZUSyHVf4BJSpTYgla+YHLaHG8LUpqV7MHctlYzlw==" crossorigin="anonymous"></script>
推荐阅读
- postgresql - 为什么数据库复制会优化数据库的读写?
- c - 无法理解警告的原因
- python - 在 Python 中的单列中追加/连接所有行
- vimeo - Vimeo API - 如何获取“可用时间”字段
- c - 如何杀死生产者消费者问题中的等待线程
- ruby-on-rails - Rails 中的多选语句,但试图防止对特定属性的重复查询
- python - 可以在python中回收对象吗?
- html - 显示:弯曲;在标题中没有效果
- angular - 如果来自管道过滤器的数据在Angular8中为空,如何显示自定义消息
- android - 在 Kotlin 中将 ByteArray 转换为 PrivateKey