重複するキーを持つJSONファイルがあり、重複するキーとその値を1つのレコードにマージしたい。一致する値を持つJsonをマージする
例:
JSONは次のようになります。
{
"numbers": {
"0BJA10GH001": {
"links": [
{
"name": "RI-Fliessbild: RG MFB L3 RI_002",
"path": "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf",
"searchNumber": true
},
{
"name": "Katalog Sensor: TGM/siehe 0BJA10GH001 -1_5.1",
"path": "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf",
"searchNumber": false
},
{
"name": "Datenblatt: 0BJA10GH001",
"path": "/Datenblaetter Messstellenliste/RG MFB L3 RI_002/0BJA10GH001.pdf",
"searchNumber": false
}
],
"aliases": [
"0BJA10GH001"
]
},
"0BJA10GH001": {
"links": [
{
"name": "RI-Fliessbild: RG MFB L3 RI_002",
"path": "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf",
"searchNumber": true
},
{
"name": "Komponentenbeschreibung: TGM/---",
"path": "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf",
"searchNumber": false
},
{
"name": "Datenblatt: 0BJA10GH001",
"path": "/Datenblaetter Apparateliste/RG MFB L3 RI_002/0BJA10GH001.pdf",
"searchNumber": false
}
],
"aliases": [
"0BJA10GH001"
]
}
} }私はそれが見えるようにしたい
:
{
"numbers": {
"0BJA10GH001": {
"links": [
{
"name": "RI-Fliessbild: RG MFB L3 RI_002",
"path": "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf",
"searchNumber": true
},
{
"name": "Katalog Sensor: TGM/siehe 0BJA10GH001 -1_5.1",
"path": "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf",
"searchNumber": false
},
{
"name": "Datenblatt: 0BJA10GH001",
"path": "/Datenblaetter Messstellenliste/RG MFB L3 RI_002/0BJA10GH001.pdf"
},
{
"name": "Komponentenbeschreibung: TGM/---",
"path": "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf",
"searchNumber": false
},
{
"name": "Datenblatt: 0BJA10GH001",
"path": "/Datenblaetter Apparateliste/RG MFB L3 RI_002/0BJA10GH001.pdf",
"searchNumber": false
}
],
"aliases": [
"0BJA10GH001"
]
}
}
}
2つのキー "0BJA10GH001"が同じマージであり、内部の重複値が削除されます。
var SeatWithCat = [{"0BJA10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Katalog Sensor: TGM/siehe 0BJA10GH001 -1_5.1", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BJA10GH001", "path" : "/Datenblaetter Messstellenliste/RG MFB L3 RI_002/0BJA10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BJA10GH001"] },
"0BJA10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: TGM/---", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BJA10GH001", "path" : "/Datenblaetter Apparateliste/RG MFB L3 RI_002/0BJA10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BJA10GH001"] },
"0BMC10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Katalog Sensor: TGM/siehe 0BMC10GH001 -1_5.1", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BMC10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BMC10GH001", "path" : "/Datenblaetter Messstellenliste/RG MFB L3 RI_002/0BMC10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BMC10GH001"] },
"0BMC10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: TGM/---", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BMC10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BMC10GH001", "path" : "/Datenblaetter Apparateliste/RG MFB L3 RI_002/0BMC10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BMC10GH001"] },
"0CFB01BB020" : { "links" : [{ "name" : "RI-Fliessbild: 90034652", "path" : "/C1_RI-Fliessbilder/C1.1/1_2/90034652.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: Messer Gas/HCl in N2", "path" : "/1_Verfahrenstechnik/Teil B/1_B7/1_B7.5/01_0CFB01BB020.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0CFB01BB020", "path" : "/Datenblaetter Apparateliste/90034652/0CFB01BB020.pdf", "searchNumber" : false }], "aliases" : ["0CFB01BB020"] },
"0CFB01BB021" : { "links" : [{ "name" : "RI-Fliessbild: 90034652", "path" : "/C1_RI-Fliessbilder/C1.1/1_2/90034652.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: Messer Gas/NH3 in N2", "path" : "/1_Verfahrenstechnik/Teil B/1_B7/1_B7.5/01_0CFB01BB021.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0CFB01BB021", "path" : "/Datenblaetter Apparateliste/90034652/0CFB01BB021.pdf", "searchNumber" : false }], "aliases" : ["0CFB01BB021"] }}];
function combine(arr) {
var combined = arr.reduce(function(result, item) {
var current = result[item.key];
result[item.key] = !current ? item : {
kks: item.key,
};
return result;
}, {});
return Object.keys(combined).map(function(key) {
return combined[key.key];
});
}
var result = combine(SeatWithCat);
console.log(result);
document.write(JSON.stringify(result));
これはこれまでのコードであり、最初の部分で動作します。ダブルキー "0BJA10GH001"は削除されますが、配列内の値は重複キーから結合されません。
各キー「0BJA10GH001」の中に「リンク」配列があり、これらの「リンク」配列は、複製がマージされるときに互いに結合する必要があります。
重複キー "0BJA10GH001"内のすべての値は、1つの配列に結合する必要があります。どうすればそれを達成できますか? さらに進んで、配列内の複製をどのように削除できますか?
ありがとうございました。今
コード:
var SeatWithCat = [{"0BJA10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Katalog Sensor: TGM/siehe 0BJA10GH001 -1_5.1", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BJA10GH001", "path" : "/Datenblaetter Messstellenliste/RG MFB L3 RI_002/0BJA10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BJA10GH001"] },
"0BJA10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: TGM/---", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BJA10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BJA10GH001", "path" : "/Datenblaetter Apparateliste/RG MFB L3 RI_002/0BJA10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BJA10GH001"] },
"0BMC10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Katalog Sensor: TGM/siehe 0BMC10GH001 -1_5.1", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BMC10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BMC10GH001", "path" : "/Datenblaetter Messstellenliste/RG MFB L3 RI_002/0BMC10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BMC10GH001"] },
"0BMC10GH001" : { "links" : [{ "name" : "RI-Fliessbild: RG MFB L3 RI_002", "path" : "/C1_RI-Fliessbilder/C1.1/3/RG MFB L3 RI_002.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: TGM/---", "path" : "/1_Verfahrenstechnik/Teil B/1_B5/1_B5.1/01_0BMC10GH001.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0BMC10GH001", "path" : "/Datenblaetter Apparateliste/RG MFB L3 RI_002/0BMC10GH001.pdf", "searchNumber" : false }], "aliases" : ["0BMC10GH001"] },
"0CFB01BB020" : { "links" : [{ "name" : "RI-Fliessbild: 90034652", "path" : "/C1_RI-Fliessbilder/C1.1/1_2/90034652.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: Messer Gas/HCl in N2", "path" : "/1_Verfahrenstechnik/Teil B/1_B7/1_B7.5/01_0CFB01BB020.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0CFB01BB020", "path" : "/Datenblaetter Apparateliste/90034652/0CFB01BB020.pdf", "searchNumber" : false }], "aliases" : ["0CFB01BB020"] },
"0CFB01BB021" : { "links" : [{ "name" : "RI-Fliessbild: 90034652", "path" : "/C1_RI-Fliessbilder/C1.1/1_2/90034652.pdf", "searchNumber" : true },{ "name" : "Komponentenbeschreibung: Messer Gas/NH3 in N2", "path" : "/1_Verfahrenstechnik/Teil B/1_B7/1_B7.5/01_0CFB01BB021.pdf", "searchNumber" : false },{ "name" : "Datenblatt: 0CFB01BB021", "path" : "/Datenblaetter Apparateliste/90034652/0CFB01BB021.pdf", "searchNumber" : false }], "aliases" : ["0CFB01BB021"] }}];
function combine(arr) {
var combined = arr.reduce(function(result, item) {
var current = result[item.key];
result[item.key] = !current ? item : {
kks: item.key,
};
return result;
}, {});
return Object.keys(combined).map(function(key) {
return combined[key.key];
});
}
var result = combine(SeatWithCat);
console.log(result);
あなたの答え、特にコード・ブロックをフォーマットしてください。 – Arount
javascriptオブジェクトにキーを重複させることはできません。あなたのオブジェクトは間違っています。 – Shubham
重複を削除するには、それらを重複して削除します。 – silvankaufmann