Ramda 过滤器 null 属性
Ramda filter null prop
我有事件对象数组,看起来像:
{
date: "2015-06-03T19:29:01.000Z",
description: "Test",
talks: [{
author: "Nick",
tags: ["tag1", "tag2", "tag3"]
}]
}
我只想从这个对象中获取标签,所以我这样使用 Ramda:
let eventTags = pipe(prop('talks'), map(prop('tags')), flatten, uniq)
...
eventTags(event); //and call function on event object
但有些情况下事件对象如下所示:
{
date: "2015-06-03T19:29:01.000Z",
description: "Test",
talks: [{
author: "Nick",
tags: null
}]
}
所以我在 eventTags
数组中得到了 [null]
,但我想得到一个空数组。那么如何过滤空值?
我提倡一种解决方案,可以使用镜头访问 tags
,并使用 Ramda 和 [=] 将 undefined
视为 Maybe Nothing
14=]
const x = [{
date: "2015-06-03T19:29:01.000Z",
description: "Test",
talks: [{
author: "Nick",
tags: ["tag1", "tag2", "tag3"]
}]
}, {
date: "2015-06-03T19:29:01.000Z",
description: "Test",
talks: [{
author: "Nick",
tags: null
}]
}]
const viewTalks = S.compose ( S.toMaybe ) (
R.view ( R.lensProp( 'talks' ) )
)
const viewTags = S.compose ( S.toMaybe ) (
R.view ( R.lensProp ( 'tags' ) )
)
const allTalkTags = S.map ( S.pipe ( [
S.map ( viewTags ),
S.justs,
R.unnest
] ) )
const allTalksTags = S.pipe( [
S.map ( S.pipe( [
viewTalks,
allTalkTags
] ) ),
S.justs,
R.unnest,
R.uniq
] )
// outputs: ['tag1', 'tag2', 'tag3']
allTalksTags ( x )
在 Matías Fidemraizer 的帮助下,我将 eventTags
功能更改为:
const viewTags = talk => !!talk.tags ? talk.tags : [];
export let eventTags = pipe(prop('talks'), map(viewTags), flatten, uniq)
您可以在此处利用 R.defaultTo([])
创建一个函数,如果收到 null 或未定义的值,则 returns 一个空数组,否则通过未修改的值传递值。
const eventTags = pipe(
prop('talks'),
map(pipe(prop('tags'), defaultTo([]))),
flatten,
uniq
)
我有事件对象数组,看起来像:
{
date: "2015-06-03T19:29:01.000Z",
description: "Test",
talks: [{
author: "Nick",
tags: ["tag1", "tag2", "tag3"]
}]
}
我只想从这个对象中获取标签,所以我这样使用 Ramda:
let eventTags = pipe(prop('talks'), map(prop('tags')), flatten, uniq)
...
eventTags(event); //and call function on event object
但有些情况下事件对象如下所示:
{
date: "2015-06-03T19:29:01.000Z",
description: "Test",
talks: [{
author: "Nick",
tags: null
}]
}
所以我在 eventTags
数组中得到了 [null]
,但我想得到一个空数组。那么如何过滤空值?
我提倡一种解决方案,可以使用镜头访问 tags
,并使用 Ramda 和 [=] 将 undefined
视为 Maybe Nothing
14=]
const x = [{
date: "2015-06-03T19:29:01.000Z",
description: "Test",
talks: [{
author: "Nick",
tags: ["tag1", "tag2", "tag3"]
}]
}, {
date: "2015-06-03T19:29:01.000Z",
description: "Test",
talks: [{
author: "Nick",
tags: null
}]
}]
const viewTalks = S.compose ( S.toMaybe ) (
R.view ( R.lensProp( 'talks' ) )
)
const viewTags = S.compose ( S.toMaybe ) (
R.view ( R.lensProp ( 'tags' ) )
)
const allTalkTags = S.map ( S.pipe ( [
S.map ( viewTags ),
S.justs,
R.unnest
] ) )
const allTalksTags = S.pipe( [
S.map ( S.pipe( [
viewTalks,
allTalkTags
] ) ),
S.justs,
R.unnest,
R.uniq
] )
// outputs: ['tag1', 'tag2', 'tag3']
allTalksTags ( x )
在 Matías Fidemraizer 的帮助下,我将 eventTags
功能更改为:
const viewTags = talk => !!talk.tags ? talk.tags : [];
export let eventTags = pipe(prop('talks'), map(viewTags), flatten, uniq)
您可以在此处利用 R.defaultTo([])
创建一个函数,如果收到 null 或未定义的值,则 returns 一个空数组,否则通过未修改的值传递值。
const eventTags = pipe(
prop('talks'),
map(pipe(prop('tags'), defaultTo([]))),
flatten,
uniq
)