Как я могу сравнить и сопоставить ключи объекта двух разных объектов? - PullRequest
0 голосов
/ 04 декабря 2018

Возьмите следующие два объекта.

filterForm = {'claim_number': null, 'status': 'approved', 'patient': null, 'service_date': null}

this.rows = [
 { "claim_number": '6632224-3', 'patient': 'Janine Soprano', 'allowed_amount':'$100', 'service': 'medical', 'status': 'approved', 'provider': 'Sam Smith'},
 { "claim_number": '3218458-0', 'patient': 'Samatha Snow', 'allowed_amount':'$1100', 'service': 'medical', 'status': 'approved', 'provider': 'John Smith'}

Как я могу пройти через this.rows и проверить, какие из его ключей Object соответствуют ключам filterForm?Я видел пост о проверке, точно ли объект соответствует другому, но меня интересует только циклический просмотр объекта, чтобы проверить, какие ключи совпадают.

Впоследствии, когда я установлю, какие ключи совпадают, как я могу проверить, какие значения соответствуют?

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Вы можете использовать flatMap , Array.filter () и новый объект Set для получения уникальных ключей, сохраняя при этом ваш код коротким и читабельным.

// Get an array of filterForm's keys
const filterFormKeys = Object.keys(filterForm);

// Get a flattened array of this.rows' keys
const rowKeys = this.rows.flatMap(item => Object.keys(item));

// Get keys that exist in both arrays using Array.filter
const existingKeys = rowKeys.filter(key => filterFormKeys.includes(key));

// Use the Set object to get unique keys out of existingKeys
const uniqueExistingKeys = [...new Set(existingKeys)];

console.log(uniqueExistingKeys)

Вот пример jsfiddle с примером (откройте консоль).

Примечание: Вы также можете использовать filter вместо Set

const uniqueExistingKeys = existingKeys.filter((value, index) =>
    existingKeys.indexOf(value) === index);

Я выбрал Сет, потому что он более лаконичен.Это все зависит от вас:)

0 голосов
/ 04 декабря 2018

Вот простой пример того, как найти подходящие ключи.Это делает следующее:

  1. Получение ключей filter_form с использованием Object.keys () .
  2. Создание Установите этих клавиш для быстрого поиска, используя Set.has () .
  3. Выполните цикл по строкам.
    1. Для каждой строки получите ключи так же, как описано выше.
    2. Используйте Array.filter () , чтобы отфильтровать ключи, которыеприсутствуют в filter_keys.

var filter_form, rows, filter_keys, result;

filter_form = { 'claim_number': null, 'status': 'approved', 'patient': null, 'service_date': null };

rows = [
  { 'claim_number': '6632224-3', 'patient': 'Janine Soprano', 'allowed_amount': '$100', 'service': 'medical', 'status': 'approved', 'provider': 'Sam Smith' },
  { 'claim_number': '3218458-0', 'patient': 'Samatha Snow', 'allowed_amount': '$1100', 'service': 'medical', 'status': 'approved', 'provider': 'John Smith' }
];

filter_keys = new Set(Object.keys(filter_form));
result = rows.map(row => Object.keys(row).filter(key => filter_keys.has(key)));

console.log(result);

В этом ответе используется экземпляр Set для быстрого поиска ключей.Если вы не хотите использовать наборы, замените следующие части.

filter_keys = new Set(Object.keys(filter_form))
// with
filter_keys = Object.keys(filter_form)

key => filter_keys.has(key)
// with 
key => filter_keys.indexOf(key) !== -1

Если вы не заинтересованы в отображении, а хотите работать с соответствующими ключамив текущей итерации используйте:

let filter_keys = new Set(Object.keys(filter_form));
rows.forEach(row => {
  let matching_keys = Object.keys(row).filter(key => filter_keys.has(key));
  // ...
});
0 голосов
/ 04 декабря 2018

Вы можете использовать Object.keys, чтобы получить filterForm ключи:

let availableKeys = Object.keys(filterForm);

Затем вам нужно выполнить цикл this.rows и найти все ключи, содержащиеся в вашем массиве:

this.rows.forEach(row => {
    let rowKeys = Object.keys(row);
    let matchingRowKeys = availableKeys.filter(k => rowKeys.indexOf(k) > -1);

    //If you then want to check if the values match
    matchingRowKeys.forEach(rk => {
        if (row[rk] === filterForm[rk]) {
            //matching value
            console.log("Found matching key/value", rk, row[rk]);
        }
    });
});

Скрипка: http://jsfiddle.net/2nw3fg0d/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...