Проверьте, содержит ли объект JavaScript значение из другого объекта - PullRequest
0 голосов
/ 01 марта 2019

У меня есть проект, в котором я работаю над условными правилами для формы.На данный момент у меня есть два объекта, где один - это условия, а другой - заполненные поля формы, которые мне нужно проверить по условиям.

Я дошел до создания обоих объектов, затемлогическим шагом для меня будет 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 голосов
/ 01 марта 2019

Я сделаю что-то вроде этого:

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');
}
0 голосов
/ 01 марта 2019

Ключи объекта / записи и каждый.Каждый зацикливается, проверьте на совпадение.Если совпадение не удается, оно прекращает цикл.

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)
0 голосов
/ 01 марта 2019

Сравните 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);
0 голосов
/ 01 марта 2019

Вы можете взять ключи и проверить каждые значение ключа.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...