[英]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.