我有一个项目,我在其中处理表单的条件规则。此时,我有两个对象,其中一个是条件,另一个是填写的表单字段,需要根据条件进行检查。
我已经做了两个对象,对我来说,下一个逻辑步骤是if statement
,它检查表单对象是否包含所有条件对象的值。 (如果我错了,请纠正我)
我将在此处显示两个对象:
let conditions = {
carrier: "PostNL",
country: "Deutschland"
}
let ticket_data = {
carrier: "PostNL",
client: "testdata",
comment: "testdata",
country: "Deutschland",
postal_code: "testdata",
service_level: "testdata",
}
如您所见,对象ticket_data
包含对象conditions
包含的所有数据。在这种情况下,if statement
应该返回true
。但是,如果其中一个值不存在或不等于conditions
对象,则应返回false。
执行此操作的最佳和最简便的方法是什么?
答案 0 :(得分:2)
您可以拿起键并检查every的键值。
let conditions = { carrier: "PostNL", country: "DeutschlandTEST" }
let ticket_data = {carrier: "PostNL",client: "testdata",comment: "testdata",country: "Deutschland",postal_code: "testdata",service_level: "testdata",}
let checkTrue = Object.keys(conditions).every( e => ticket_data[e] )
let matchValues = Object.keys(conditions).every( e =>conditions[e] === ticket_data[e] )
if(Object.keys(conditions).every( e => ticket_data[e] )){
console.log(`Yeah it's working`)
}
console.log(checkTrue, matchValues)
答案 1 :(得分:2)
对象键/条目和每一个。每个循环结束,检查是否匹配。如果匹配失败,它将停止循环。
let conditions = {
carrier: "PostNL",
country: "Deutschland"
}
let ticket_data = {
carrier: "PostNL",
client: "testdata",
comment: "testdata",
country: "Deutschland",
postal_code: "testdata",
service_level: "testdata",
}
const isMatch = Object.keys(conditions)
.every(key =>
conditions[key] === ticket_data[key])
console.log(isMatch)
const isMatch2 = Object.entries(conditions)
.every(([key, value]) =>
value === ticket_data[key])
console.log(isMatch2)
答案 2 :(得分:1)
比较两者的Object.keys
:
let conditions = {
carrier: "PostNL",
country: "Deutschland"
}
let ticket_data = {
carrier: "PostNL",
client: "testdata",
comment: "testdata",
country: "Deutschland",
postal_code: "testdata",
service_level: "testdata",
}
const ticket_data_keys = Object.keys(ticket_data);
const result = Object.keys(conditions).every(key => ticket_data_keys.includes(key));
console.log(result);
答案 3 :(得分:0)
我会做这样的事情:
let conditions = {
carrier: "PostNL",
country: "Deutschland"
}
let ticket_data = {
carrier: "PostNL",
client: "testdata",
comment: "testdata",
country: "Deutschland",
postal_code: "testdata",
service_level: "testdata",
}
const requiredProps = [
'carrier', 'client', 'comment', 'country', 'postal_code', 'service_level'
];
const checkIfIsValid = (ticketData) => {
const keys = Object.keys(ticketData);
// Check for equality
const areEquals = (keys.length == requiredProps.length) && keys.every(function(element, index) {
return element === requiredProps[index];
});
if (!areEquals) {
return false;
}
if (ticketData.carrier !== conditions.carrier) {
return false;
}
if (ticketData.country !== conditions.country) {
return false;
}
return true;
}
if (checkIfIsValid(ticket_data)) {
console.log('OK');
} else {
console.log('ERROR');
}