Получить совпадающие значения двух объектов - PullRequest
0 голосов
/ 01 мая 2020

У меня есть объект inboundTransfer, который содержит неизвестное количество ключей. Я хотел бы получить все значения из свойств itemNumbersList, которые соответствуют значениям в массиве Object.keys(selectedItems). Данные, которые я получаю, выглядят примерно так:

const selectedItems = {
    'nameX': {
      propert1: 'value1',
      property2: 'value2,
        ...
    }
  },
  'nameY': {
    ...
  },
  'nameT': {
    ...
  }

const inboundTransfers = {
  0: {
    property1: 'value1',
    itemNumbersList: ['nameX', 'nameY', 'nameZ'],
  },
  1: {
    property2: 'value2',
    itemNumbersList: ['nameK', 'nameJ', 'nameT']
  },
  ...
}

const isOnTransferlist = Object.keys(inboundTransfers)
  .map((transfer) => Object.values(inboundTransfers[transfer].itemNumbersList)
    .some((item) => Object.keys(selectedItems)
      .indexOf(item) >= 0));

Очевидно, в настоящее время я проверяю, есть ли значение в обоих списках или нет. В идеале я хотел бы получить само значение. Как я мог этого добиться? Я попытался использовать .filter вместо map, но безуспешно. Любая помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Я реализовал эту функцию и проверяю, она хорошо работает.

 function match() {
    const selectedItems = {
      a: "a1",
      b: "b1",
    };
    const inboundTransfers = {
      0: {
        items: ["a", "b"],
      },
      1: {
        items: ["c", "b"],
      },
    };

    const capturedValues = []; // founded items store

    [...Object.keys(selectedItems)].forEach((arrKey) => {
      for (let [key, items] of Object.entries(inboundTransfers)) {
        Object.values(items).forEach((item) => {
          item.forEach((i) => {
            if (i === arrKey) {
              capturedValues.push(i);
            }
          });
        });
      }
    });
    // Remove redundant values
    console.log([...new Set(capturedValues)]);
  }
0 голосов
/ 01 мая 2020

Я нашел способ, который работает, но он не очень элегантный, наверное:

const list = [];

Object.keys(inboundTransfers)
  .forEach((transfer) => {
    Object.values(inboundTransfers[transfer].itemNumbersList)
      .forEach((item) => {
        if (Object.keys(selectedItems).includes(item)) {
          list.push(item);
         }
   });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...