Ich habe einen Datensatz, der den Variablennamen des Unterstrichs (_) enthält. Wie unten:
const data = {
m_name: 'my name',
m_address: 'my address',
p_1_category: 'cat 1',
p_1_name: 'name 1',
p_2_category: 'cat 2',
p_2_name: 'name 2'
}
Ich möchte sie in verschachtelte Objekte / Arrays aufteilen. Unten ist das gewünschte Ergebnis.
{
m: {
name: "my name",
address: "my address"
},
p: {
"1": {category: 'cat 1', name: 'name 1'},
"2": {category: 'cat 2', name: 'name 2'}
}
}
Wie kann ich eine rekursive Methode schreiben, um sie zu erreichen, anstatt sie fest zu codieren? Vielleicht sollte es möglich sein, tiefer verschachtelte Objekte wie "p_2_one_two_category: 'value'" in p: {2: {one: {two: category: 'value'}} zu verarbeiten.
var data ={
m_name: 'my name',
m_address: 'my address',
p_1_category: 'cat 1',
p_1_name: 'name 1',
p_2_category: 'cat 2',
p_2_name: 'name 2',
p_2_contact: '1234567',
k_id: 111,
k_name: 'abc'
}
var o ={};
Object.keys(data).forEach(key => {
var splited = key.split(/_(.+)/);
if (!o[splited[0]]) {
o[splited[0]] = {};
}
var splited1 = splited[1].split(/_(.+)/);
if (splited1.length < 3) {
o[splited[0]][splited[1]] = data[key];
} else {
if (!o[splited[0]][splited1[0]]){
o[splited[0]][splited1[0]] = {};
}
o[splited[0]][splited1[0]][splited1[1]] = data[key];
}
});
console.log(o);
mIst ein einfaches Objekt, kein Array von Objekten mit einer Eigenschaft.) Diese Ergebnisse scheinen viel logischer zu sein als Ihre Beispielausgabe. Wollen Sie das eigentlich?