检查JavaScript对象是否包含其他对象的值

时间:2019-03-01 16:52:41

标签: javascript object

我有一个项目,我在其中处理表单的条件规则。此时,我有两个对象,其中一个是条件,另一个是填写的表单字段,需要根据条件进行检查。

我已经做了两个对象,对我来说,下一个逻辑步骤是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。

执行此操作的最佳和最简便的方法是什么?

4 个答案:

答案 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');
}