Ramda从数组内的嵌套对象中获取值



我试图使用Ramda从嵌套对象中获取值,但我刚刚开始使用它

R.find(R.propEq('type', 'checklist'))((data))

数据是另一个具有不同类型的数组,但我只需要关注"检查表"类型。我只想得到属性"已检查"的项目:true。

这是我正在尝试转换的数组。

const testArray = [{
"type": "checklist",
"data": {
"items": [
{ "id": "r-1", "checked": true },
{ "id": "r-2", "checked": false }
]
}
}]

编辑:我使用进行了另一个步骤

R.path(['data', 'items'])

我只得到可以简单筛选的项目。但我不确定这样做是否正确。

任何帮助都将不胜感激。

这里有一种方法:

const checkedItems = pipe (
find (propEq('type', 'checklist')),
defaultTo ({data: {items: []}}),
path (['data', 'items']),
filter (prop ('checked'))
)
const testArray = [{type: "checklist", data: {items: [{id: "r-1", checked: true }, {id: "r-2", checked: false}]}}]
console .log (
checkedItems (testArray)
)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>
<script>const {pipe, find, propEq, defaultTo, path, filter, prop} = R</script>

Ramda(免责声明:我是它的作者之一(是围绕着函数管道的想法设计的,一个调用的结果通过管道传输到下一个。在这里,我们使用您开始使用的propEq,将其管道传输到一个defaultTo调用,如果上一步没有找到任何内容,它将提供一个合理的默认值,然后是您使用的path语句,最后是filter调用,它只保留checked属性为true的调用。

如果您对自己的数据有绝对的把握,可以跳过defaultTo步骤。

filter调用也可以是filter (propEq ('checked', true)),但由于prop ('checked')可能返回布尔值,所以我选择了更简单的版本。

相关内容

  • 没有找到相关文章

最新更新