![](/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.