簡體   English   中英

獲取兩個對象的匹配值

[英]Get matching values of two objects

我有一個包含未知數量的密鑰的 object 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但沒有成功。 任何幫助深表感謝!

我實現了這個 function 並對其進行了測試,它運行良好。

 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)]);
  }

我找到了一種可行的方法,但我猜它不是很優雅:

const list = [];

Object.keys(inboundTransfers)
  .forEach((transfer) => {
    Object.values(inboundTransfers[transfer].itemNumbersList)
      .forEach((item) => {
        if (Object.keys(selectedItems).includes(item)) {
          list.push(item);
         }
   });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM