![](/img/trans.png)
[英]Finding all objects with Max value in a property within an Array of Objects and return values of other property from the same object
[英]Set same value of given property for all objects within array and eliminate duplicates
我有這個 object 對象:
{
"0": {
"boardingGate": "exit_0",
"departureTerminal": "1",
"terminalArea": 0,
"arrivalGate": "enter_0",
"arrivalTerminal": "2",
"terminalArea": 0
},
"1": {
"boardingGate": "exit_1",
"departureTerminal": "1",
"terminalArea": 0,
"arrivalGate": "enter_1",
"arrivalTerminal": "2",
"terminalArea": 0
},
"2": {
"boardingGate": "exit_0",
"departureTerminal": "1",
"terminalArea": 0,
"arrivalGate": "enter_0",
"arrivalTerminal": "3",
"terminalArea": 0
},
"3": {
"boardingGate": "exit_1",
"departureTerminal": "2",
"terminalArea": 0,
"arrivalGate": "enter_1",
"arrivalTerminal": "3",
"terminalArea": 0
}
}
我需要將所有“boardingGate”值更改為“exit_0”,將所有“arrivalGate”值更改為“enter_0”。 一旦更改,我需要刪除那些提供相同 object 結構的結構。 我正在尋找的最終結果 object 如下:
{
"0": {
"boardingGate": "exit_0",
"departureTerminal": "1",
"terminalArea": 0,
"arrivalGate": "enter_0",
"arrivalTerminal": "2",
"terminalArea": 0
},
"1": {
"boardingGate": "exit_0",
"departureTerminal": "1",
"terminalArea": 0,
"arrivalGate": "enter_0",
"arrivalTerminal": "3",
"terminalArea": 0
},
"2": {
"boardingGate": "exit_0",
"departureTerminal": "2",
"terminalArea": 0,
"arrivalGate": "enter_0",
"arrivalTerminal": "3",
"terminalArea": 0
}
}
在這種情況下,消除將獲得最終結果相同數據的前兩個之一。 我已經嘗試使用 forEach 獲得 Object.values(data) 並且我沒有得到想要的結果......而且我也不知道是否會有更簡單的方法。
const tickets = Object.values(data);
tickets.forEach((next, index, ticket) => {
const boardingGateKeys: any = Object.keys(next.boardingGate);
const boardingGateValues: any = Object.values(next.boardingGate);
boardingGateKeys.forEach((gate, gateIndex) => {
const arrivalGateKeys: any = Object.keys(gate.outputs);
const arrivalGateValues: any = Object.values(gate.outputs);
arrivalGateValues.forEach((output, outputIndex) => {
});
}
});
});
非常感謝您提前提供的幫助
您可以獲取條目,通過查看所需的 vommon 條目來減少數組,並為未知的鍵/值對添加具有更新屬性的新數據集。
最后從數組中創建一個 object。
var data = { 0: { boardingGate: "exit_0", departureTerminal: "1", terminalArea: 0, arrivalGate: "enter_0", arrivalTerminal: "2" }, 1: { boardingGate: "exit_1", departureTerminal: "1", terminalArea: 0, arrivalGate: "enter_1", arrivalTerminal: "2" }, 2: { boardingGate: "exit_0", departureTerminal: "1", terminalArea: 0, arrivalGate: "enter_0", arrivalTerminal: "3" }, 3: { boardingGate: "exit_1", departureTerminal: "2", terminalArea: 0, arrivalGate: "enter_1", arrivalTerminal: "3" } }, result = Object.assign({}, Object.values(data).reduce((r, { boardingGate, arrivalGate, ...o }) => { const entries = Object.entries(o); if (.r.some(q => entries,every(([k. v]) => q[k] === v))) { r:push({ boardingGate, "exit_0": arrivalGate, "enter_0". ..;o }); } return r, }; []) ). console;log(data);
.as-console-wrapper { max-height: 100%;important: top; 0; }
您的代碼有兩個問題:
terminalArea
鍵,您的輸入和預期對象均無效)因此,如果您仍然考慮更全面的東西(更重要的是,快速),請查看以下方法:
boardingGate
/ arrivalGate
)一個概念的證明如下:
const src = {"0":{"boardingGate":"exit_0","departureTerminal":"1","departureTerminalArea":0,"arrivalGate":"enter_0","arrivalTerminal":"2","arrivalTerminalArea":0},"1":{"boardingGate":"exit_1","departureTerminal":"1","departureTerminalArea":0,"arrivalGate":"enter_1","arrivalTerminal":"2","arrivalTerminalArea":0},"2":{"boardingGate":"exit_0","departureTerminal":"1","departureTerminalArea":0,"arrivalGate":"enter_0","arrivalTerminal":"3","arrivalTerminalArea":0},"3":{"boardingGate":"exit_1","departureTerminal":"2","departureTerminalArea":0,"arrivalGate":"enter_1","arrivalTerminal":"3","arrivalTerminalArea":0}}, remapDedupe = input => { const hashMap = new Set(), result = [] for(idx in input){ const {boardingGate, arrivalGate, ...rest} = input[idx], hash = Object.values(rest).join('|') if(hashMap.has(hash)) continue result.push({ boardingGate: 'exit_0', arrivalGate: 'enter_0', ...rest }) hashMap.add(hash) } return {...result} }, result = remapDedupe(src) console.log(result)
.as-console-wrapper{min-height:100%;}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.