Giả sử, chúng ta có đối tượng JSON sau có thể chứa lồng nhau ở bất kỳ cấp nào -
const obj = { "one": 1, "two": { "three": 3 }, "four": { "five": 5, "six": { "seven": 7 }, "eight": 8 }, "nine": 9 };
Chúng tôi được yêu cầu viết một hàm JavaScript nhận một đối tượng JSON lồng nhau như vậy và trả về một đối tượng mới không chứa lồng và ánh xạ các giá trị tương ứng với các khóa bằng ký hiệu dấu chấm.
Do đó, trong trường hợp đối tượng ở trên, đầu ra sẽ giống như thế này -
const output = { 'one': 1, 'two.three': 3, 'four.five': 5, 'four.six.seven': 7, 'four.eight': 8, 'nine': 9 };
Ví dụ
Mã cho điều này sẽ là -
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));
Đầu ra
Và đầu ra trong bảng điều khiển sẽ là -
{ one: 1, 'two.three': 3, 'four.five': 5, 'four.six.seven': 7, 'four.eight': 8, nine: 9 }