Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取两个对象的匹配值_Javascript_Loops_Filter - Fatal编程技术网

Javascript 获取两个对象的匹配值

Javascript 获取两个对象的匹配值,javascript,loops,filter,Javascript,Loops,Filter,我有一个对象inboundTransfer,其中包含未知数量的键。我想从itemNumbersList属性中获取与数组Object.keys(selectedItems)上的值匹配的所有值。我收到的数据看起来有点像这样: const selectedItems = { 'nameX': { propert1: 'value1', property2: 'value2, ... } }, 'nameY': { ... },

我有一个对象
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
,但没有成功。
非常感谢您的帮助

我找到了一种可行的方法,但我想它不是很优雅:

const list = [];

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

我实现了这个功能,并对它进行了测试,效果很好

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

试着写一个更一般的函数,因为感觉你的索引很混乱,使它比实际更复杂,你想从数组中捕获值吗?@GalAbra我不确定我是否理解如何使它更一般,因为可能是这些对象的复杂性让我很难解决。@Menailadedine是的,我想捕获与
selectedItems的
Object.keys()匹配的
itemNumbersList
的值