Ramda移除嵌套的null值。

4
我想要从一个对象中删除所有的空值。假设我们有以下对象:
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,我该如何删除这些嵌套值?
1个回答

5
创建一个递归函数,清理对象后遍历属性并对其中每个是对象的属性调用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>


1
非常好。我通常建议Ramda不是围绕递归任务设计的,也不特别适合这种任务。但是像这样的代码让我重新考虑了这个说法。 - Scott Sauyet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接