Javascript 如果键和值都匹配,Ramda将忽略它们
我有一个包含一些数据的对象。我想挑出某些键,然后如果它们都匹配的话也省略一个键和值。这是我的目标:Javascript 如果键和值都匹配,Ramda将忽略它们,javascript,functional-programming,ramda.js,Javascript,Functional Programming,Ramda.js,我有一个包含一些数据的对象。我想挑出某些键,然后如果它们都匹配的话也省略一个键和值。这是我的目标: const obj = { title: 'some title', description: 'some descrption', image: 'default_image.png' } 我想做的是,提取描述和图像,然后省略图像,如果它的值为'default\u image.png' const fn = R.compose( // if image === 'default
const obj = {
title: 'some title',
description: 'some descrption',
image: 'default_image.png'
}
我想做的是,提取描述
和图像
,然后省略图像
,如果它的值为'default\u image.png'
const fn = R.compose(
// if image === 'default_image.png' then omit it
R.pickAll(['description', 'image'])
)
不确定在上面的第二部分中使用什么样的ramda函数是最好的。您可以创建两个不同的函数和一个布尔函数,用ramda的
ifElse
const obj1 = {
title: 'some title',
description: 'some descrption',
image: 'default_image.png'
}
const obj2 = {
title: 'title',
description: 'descrption',
image: 'image.png'
}
const withImage = R.pickAll(['description', 'image']);
const withoutImage = R.pickAll(['description']);
const hasDefault = obj => obj['image'] == 'default_image.png'
const omit = R.ifElse(hasDefault, withoutImage, withImage);
console.log(omit(obj1));
console.log(omit(obj2));
我能想到的最简单的方法是使用pickBy
const hasDefault = (val, key) => key == 'image' && val == 'default_image.png' ? false : true
console.log(R.pickBy(hasDefault, obj1))
console.log(R.pickBy(hasDefault, obj2))
您可以创建两个不同的函数和一个布尔函数,用ramda的
ifElse
const obj1 = {
title: 'some title',
description: 'some descrption',
image: 'default_image.png'
}
const obj2 = {
title: 'title',
description: 'descrption',
image: 'image.png'
}
const withImage = R.pickAll(['description', 'image']);
const withoutImage = R.pickAll(['description']);
const hasDefault = obj => obj['image'] == 'default_image.png'
const omit = R.ifElse(hasDefault, withoutImage, withImage);
console.log(omit(obj1));
console.log(omit(obj2));
我能想到的最简单的方法是使用pickBy
const hasDefault = (val, key) => key == 'image' && val == 'default_image.png' ? false : true
console.log(R.pickBy(hasDefault, obj1))
console.log(R.pickBy(hasDefault, obj2))
我可能会这样做
const fn = pipe(
when(propEq('image', 'default_image.png'), dissoc('image')),
pick(['description', 'image'])
);
返回删除了特定键的对象的副本。测试对象的给定属性是否与提供的值匹配。并接受一个谓词和一个转换函数。如果谓词与提供的数据匹配,则返回对该数据调用转换函数的结果,否则返回的数据将保持不变
请注意,我选择了而不是。唯一的区别是pick
跳过找不到的键,pickAll
返回值为undefined
您可以在中看到这一点
如果总是对列表而不是单个对象进行操作,则可以从pick
切换到:
这一个也可以在上找到,我可能会这样做
const fn = pipe(
when(propEq('image', 'default_image.png'), dissoc('image')),
pick(['description', 'image'])
);
返回删除了特定键的对象的副本。测试对象的给定属性是否与提供的值匹配。并接受一个谓词和一个转换函数。如果谓词与提供的数据匹配,则返回对该数据调用转换函数的结果,否则返回的数据将保持不变
请注意,我选择了而不是。唯一的区别是pick
跳过找不到的键,pickAll
返回值为undefined
您可以在中看到这一点
如果总是对列表而不是单个对象进行操作,则可以从pick
切换到:
这一个也可以在上找到,对
R.compose
的调用是不必要的。@ScottSauyet niice!看起来好多了对R.compose
的调用是不必要的。@ScottSauyet niice!看起来好多了