Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การทำให้อ็อบเจ็กต์ JSON ราบเรียบ (Flatten) ใน JavaScript

สมมติว่าเรามีอ็อบเจ็กต์ 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
}