Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

การแยกวิเคราะห์สตริงแบบเรียกซ้ำเป็นวัตถุ - JavaScript


เราจำเป็นต้องเขียนฟังก์ชัน 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" ] } }}