我有一个包含一些数据的对象。我想挑选一些键,然后在两者都匹配的情况下也省略键和值。这是我的对象:
const obj = {
title: 'some title',
description: 'some descrption',
image: 'default_image.png'
}
我想做的是提取
description
和image
,如果image
的值为'default_image.png'
,则将其省略。const fn = R.compose(
// if image === 'default_image.png' then omit it
R.pickAll(['description', 'image'])
)
不知道上面第二部分使用的最佳ramda函数是什么。
最佳答案
我可能会做类似的事情
const fn = pipe(
when(propEq('image', 'default_image.png'), dissoc('image')),
pick(['description', 'image'])
);
dissoc
返回删除了特定键的对象的副本。 propEq
测试对象的给定属性是否与提供的值匹配。而when
具有谓词和转换函数。如果谓词与提供的数据匹配,则返回对该数据调用转换函数的结果,否则返回该数据不变。请注意,我选择了
pick
而不是pickAll
。唯一的区别是pick
会跳过找不到的键,而pickAll
会返回值为undefined
的键。您可以在Ramda REPL中看到它。
如果始终要对列表而不是单个对象进行操作,则可以从
pick
切换到project
:const fn = pipe(
project(['description', 'image']),
map(when(propEq('image', 'default_image.png'), dissoc('image')))
);
fn(objects);
Ramda REPL上也提供了此功能。
关于javascript - Ramda如果两者都匹配,则省略键和值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42610104/