เรารู้ว่ามีสองวิธีที่เราสามารถเข้าถึงคีย์ที่ซ้อนกันภายใน Object ใน JavaScript
ตัวอย่างเช่น ใช้วัตถุนี้ −
const obj = { object: { foo: { bar: { ya: 100 } } } };
หากเราจำเป็นต้องเข้าถึงหรืออัปเดตคุณสมบัติที่ซ้อนกัน 'ya' เราสามารถเข้าถึงได้เช่น -
วิธีที่ 1 -
obj['object']['foo']['bar']['ya']
หรือ วิธีที่ 2 -
obj.object.foo.bar.ya
ทั้งสองวิธีนี้นำเราไปสู่จุดหมายเดียวกัน
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่ใช้เส้นทางไปยังคีย์ที่ซ้อนกันเป็นสตริงตามที่แสดงในวิธีที่ 1 และแปลงเป็นสัญกรณ์ที่แสดงโดยวิธีที่ 2
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const obj = { "object[foo][bar][ya]": 100 }; const constructDotNotation = obj => { const keys = Object.keys(obj)[0].split('[').map(el => { return el.replace(']', ''); }); let res = {}; keys.reverse().forEach(key => { if (Object.keys(res).length === 0){ res[key] = obj[Object.keys(obj)[0]]; }else{ const temp = {}; temp[key] = res; res = temp; }; }); return res; }; console.log(JSON.stringify(constructDotNotation(obj), undefined, 4));
ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
{ "object": { "foo": { "bar": { "ya": 100 } } } }