ramda.js - 如何使用 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 不是函数错误”。
解决方案
如果我正确解释了您的问题,您希望保留所有对象的属性a
or d
(Nil
Ramda-speak for null
or 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
的对象的位置,这应该可以解决问题:a
d
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
如果没有对象具有属性a
或d
= 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>
推荐阅读
- typescript - 在 VSCode 中重命名导出的 typescript 枚举:如何在使用它的模块中传播名称?
- laravel - 从管理门户编辑记录时的 Laravel 问题
- selenium - 我如何使用 selenium 登录并使用 scrapy 抓取文本
- java - Java 多线程计数器不工作
- css - 如何在 VS Code 中预览和打印带有文件特定 CSS 样式表的降价文件?
- git - git列出我过去修改的所有文件
- javascript - JavaScript 可以在没有任何配置的情况下运行 C 吗?
- leaflet - Leaflet + Supercluster:L.marker 的 autoPan 不工作
- javascript - 在 React 本机 useEffect 中,使用异步调用我得到一个未定义的,在以下情况下如何避免未定义?
- mule - 在 Mule 流中记录客户端错误