javascript - Ramda - 如何验证对象?
问题描述
我想使用 Ramda 重构下面的代码。我想将键和值列表与从服务器接收到的数据进行比较,如果数据匹配,则函数运行。为此,我创建了一个键和值列表,并使用include()
我得到了一个boolean
.
//example data
data = { fieldName: 'secretKey', fieldValue: 'ymt' }
const fieldNames = ['secretKey', 'activateCode']
const fieldValues = ['ymt', 'IdTYj']
if ( fieldNames.includes(data.fieldName) || fieldValues.includes(data.fieldValue)) {
yield put(isLoading(true));
}
而不是include()
我用过R.include
,但我总是得到false
const field = R.equals( fieldNames, data.fieldName) // return false
Ramda 中哪种方法更适合比较键和值以返回 a boolean
?
解决方案
我宁愿做类似的事情,你需要R.flip(R.includes)
在你的算法中使用它
const put = R.identity;
const isLoading = R.identity;
function* validate(data) {
const keys = ['secretKey', 'activateCode'];
const values = ['ymt', 'IdTYj'];
const predicate = R.where({
fieldName: R.includes(R.__, keys),
fieldValue: R.includes(R.__, values),
});
if (predicate(data)) {
yield put(isLoading(true));
}
};
const iterator = validate({
fieldName: 'secretKey',
fieldValue: 'ymt',
});
console.log(
iterator.next().value
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.js" integrity="sha512-3sdB9mAxNh2MIo6YkY05uY1qjkywAlDfCf5u1cSotv6k9CZUSyHVf4BJSpTYgla+YHLaHG8LUpqV7MHctlYzlw==" crossorigin="anonymous"></script>
推荐阅读
- flutter - 如何从颜色列表中选择更改容器颜色?
- java - Java Data Elasticsearch 客户端将端口 9200 附加到 url
- java - jdeps 返回“未找到”
- ruby-on-rails - ActiveRecord 集合减法
- blazor - 在 Blazor 组件中的选项卡之间切换时如何保留数据?
- javascript - 在 React 事件中使用 setTimeout,出于性能原因重用此合成事件
- amazon-web-services - 如果没有设置重新驱动策略,AWS SQS 中的失败消息会发生什么情况?
- java - 使用 ASM 修改 Java 字节码会引发 ClassFormatError: Invalid length XXX in LocalVariableTable
- apache-kafka - 分区的奇怪行为使用 Kafka 消费者获取最大字节数
- nlp - 用 spacy 单数化名词短语