首页 > 解决方案 > 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

标签: javascriptramda.js

解决方案


我宁愿做类似的事情,你需要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>


推荐阅读