Ramda - 如何验证一个对象?
Ramda - How to validate an object?
我想使用 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));
}
我用 R.include
而不是 include()
但我总是得到 false
const field = R.equals( fieldNames, data.fieldName) // return false
Ramda 中哪种方法更适合将键和值与 return 和 boolean
进行比较?
我认为您正在寻找 where
例如
const check = where({ username: either(equals('foo'), equals('FOO'))
, password: either(equals('bar'), equals('BAR'))});
check({username: 'foo', password: 'qux'}); // false
check({username: 'qux', password: 'bar'}); // false
check({username: 'foo', password: 'bar'}); // true
check({username: 'foo', password: 'BAR'}); // true
check({username: 'FOO', password: 'BAR'}); // true
我宁愿做类似的事情,
您需要 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>
我想使用 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));
}
我用 R.include
而不是 include()
但我总是得到 false
const field = R.equals( fieldNames, data.fieldName) // return false
Ramda 中哪种方法更适合将键和值与 return 和 boolean
进行比较?
我认为您正在寻找 where
例如
const check = where({ username: either(equals('foo'), equals('FOO'))
, password: either(equals('bar'), equals('BAR'))});
check({username: 'foo', password: 'qux'}); // false
check({username: 'qux', password: 'bar'}); // false
check({username: 'foo', password: 'bar'}); // true
check({username: 'foo', password: 'BAR'}); // true
check({username: 'FOO', password: 'BAR'}); // true
我宁愿做类似的事情,
您需要 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>