สมมติว่าเรามีอ็อบเจ็กต์ JSON ที่ซ้อนกันหลายระดับ:
const obj = {
"one": 1,
"two": {
"three": 3
},
"four": {
"five": 5,
"six": {
"seven": 7
},
"eight": 8
},
"nine": 9
};
เราต้องเขียนฟังก์ชันที่รับอ็อบเจ็กต์ JSON แบบซ้อนกันและคืนอ็อบเจ็กต์ใหม่ที่ไม่มีการซ้อน แมปค่าไปยังคีย์โดยใช้สัญลักษณ์จุด (dot notation)
ตัวอย่างผลลัพธ์
const output = {
'one': 1,
'two.three': 3,
'four.five': 5,
'four.six.seven': 7,
'four.eight': 8,
'nine': 9
};
ตัวอย่างโค้ด
const obj = {
"one": 1,
"two": {
"three": 3
},
"four": {
"five": 5,
"six": {
"seven": 7
},
"eight": 8
},
"nine": 9
};
const flattenJSON = (obj = {}, res = {}, extraKey = '') => {
for(key in obj) {
if(typeof obj[key] !== 'object') {
res[extraKey + key] = obj[key];
} else {
flattenJSON(obj[key], res, `${extraKey}${key}.`);
}
}
return res;
};
console.log(flattenJSON(obj));
ผลลัพธ์
{
one: 1,
'two.three': 3,
'four.five': 5,
'four.six.seven': 7,
'four.eight': 8,
nine: 9
}