我有这个对象的对象。
{
"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
}
}
我需要把所有登机口的值改成exit_0,把所有到达口的值改成enter_0。而一旦改变后,我需要删除那些给出平等对象结构的对象。最终我所要找的结果对象会是下面这个样子。
{
"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条目来减少数组,并为未知的键值对添加一个具有更新属性的新数据集。
最后从数组中创建一个对象。
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%;}