首页 > 解决方案 > 如何使用 Ramda 将对象数组转换为列表

问题描述

R.pipe(
  R.map(R.any(R.isNil(R.pickAll(['a','d']))))
)([{a: 1, b: 2, c: 3, d: 4},{a: 1, b: 2, c: 3, d: 5}])

生成一个包含两个对象的数组,因为这两个对象都不是 Nil。相反,我想评估单个列表中的值,并查看是否有 Nil。我试过使用 flatten 但得到一个“n.apply 不是函数错误”。

标签: ramda.js

解决方案


如果我正确解释了您的问题,您希望保留所有对象的属性aor dNilRamda-speak for nullor undefined)。如果我误解了,请纠正我。

假设我的解释是正确的,这应该可以解决问题:

const data = [{b: 2, c: 3, d: 4}, {a: 1, b: 2, c: 3}, {a: 1, b: 2, c: 3, d: 5}]

const result = R.filter(
  R.either(R.propSatisfies(R.isNil, 'a'), R.propSatisfies(R.isNil, 'd')),
  data
)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>

相反,如果您想要一个新数组,该数组位于任何或为 Nil true的对象的位置,这应该可以解决问题:ad

const data = [{b: 2, c: 3, d: 4}, {a: 1, b: 2, c: 3}, {a: 1, b: 2, c: 3, d: 5}]

const result = R.map(
  R.either(R.propSatisfies(R.isNil, 'a'), R.propSatisfies(R.isNil, 'd')),
  data
)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>

要返回单个布尔值(true如果没有对象具有属性ad= Nil,false否则):

const data = [{b: 2, c: 3, d: 4}, {a: 1, b: 2, c: 3}, {a: 1, b: 2, c: 3, d: 5}]

const result = R.all(
  R.either(R.propSatisfies(R.isNil, 'a'), R.propSatisfies(R.isNil, 'd')),
  data
)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>


推荐阅读