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
的值