เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของสตริงและส่งคืนอ็อบเจ็กต์ที่สอดคล้องกับสตริง
ตัวอย่างเช่น −
หากอาร์เรย์เป็น −
const arr =[ "country.UK.level.1", "country.UK.level.2", "country.US.level.1", "country.UK.level.3"];ก่อน>จากนั้นผลลัพธ์ควรเป็น −
const output ={ "ประเทศ":[ {"UK" :{"level" :["1", "2", "3"]}}, {"US" :{"level" :[" 1","2"]}} ]}
เงื่อนไข
สตริงที่จัดเก็บไว้ในอาร์เรย์ str จะไม่ถูกจัดเรียงและโค้ดควรจะมีประสิทธิภาพเทียบกับสิ่งนั้น
สตริงจะเป็นไปตามรูปแบบ x.y.x.y... โดยที่ x จะไม่ซ้ำกันสำหรับอาร์เรย์นั้น และ y สามารถเปลี่ยนแปลงได้ ในประเทศและระดับตัวอย่างของฉันจะเหมือนกับที่แสดง x pos เสมอ
สิ่งนี้ต้องใช้วิธีการเรียกซ้ำเนื่องจากสตริงที่เก็บไว้ในอาร์เรย์ str สามารถมีความยาวเท่าใดก็ได้ ยิ่งสายยาวยิ่งซ้อนลึก
ตัวอย่าง
ต่อไปนี้เป็นรหัส -
const arr =[ "country.UK.level.1", "country.UK.level.2", "country.US.level.1", "country.UK.level.3"];const stringToObject =arr => { const obj ={}; arr.forEach(str => { let curr =obj; let splitted =str.split('.'); let last =splitted.pop(); let beforeLast =splitted.pop(); splitted.forEach (ย่อย => { if(!curr.hasOwnProperty(sub)){curr[sub] ={}; };curr =curr[sub]; }); if(!curr[beforeLast]){curr[beforeLast] =[]; };curr[beforeLast].push(last); }); return obj;};console.log(JSON.stringify(stringToObject(arr), undefined, 4));ผลลัพธ์
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้บนคอนโซล -
{ "ประเทศ":{ "สหราชอาณาจักร":{ "ระดับ":[ "1", "2", "3" ] } "สหรัฐฯ":{ "ระดับ":[ "1" ] } }}