เรามี parentArray ที่มีอาร์เรย์ย่อยหลายอันซึ่งแต่ละอันมีขนาดเท่ากัน แต่ละอาร์เรย์ย่อยคืออาร์เรย์ของอ็อบเจ็กต์ที่มีสองคุณสมบัติ:คีย์และค่า ภายในอาร์เรย์ย่อยจะได้รับการยืนยันว่าวัตถุสองชิ้นไม่สามารถมีคีย์เดียวกันได้ แต่อาร์เรย์ย่อยทั้งหมดมีคีย์ n คู่เหมือนกัน โดยที่ n คือขนาดของอาร์เรย์ย่อย
งานของเราคือการเตรียมอ็อบเจ็กต์ที่มีคีย์เป็นคีย์ของอ็อบเจกต์ และค่าเป็นอาร์เรย์ที่มีค่าทั้งหมดสำหรับคีย์นั้นๆ
นี่คือตัวอย่างอาร์เรย์หลัก -
const parentArray = [[ { key: 123, value: 'India' }, { key: 124, value: 'USA' }, { key: 125, value: 'Japan' }, { key: 126, value: 'Denmark' }, { key: 127, value: 'Austria' }, ], [ { key: 124, value: 'Kenya' }, { key: 126, value: 'UK' }, { key: 123, value: 'Germany' }, { key: 127, value: 'Spain' }, { key: 125, value: 'Portugal' }, ]];
เราจะวนซ้ำในอาร์เรย์หลักและอาร์เรย์ย่อยทั้งหมดทีละรายการ และหากเราพบคีย์ที่ตรงกัน เราจะพุชลงในอาร์เรย์ของค่า มิฉะนั้น เราจะสร้างอาร์เรย์ค่าใหม่
รหัสเต็มสำหรับสิ่งนี้จะเป็น -
const parentArray = [[ { key: 123, value: 'India' }, { key: 124, value: 'USA' }, { key: 125, value: 'Japan' }, { key: 126, value: 'Denmark' }, { key: 127, value: 'Austria' }, ], [ { key: 124, value: 'Kenya' }, { key: 126, value: 'UK' }, { key: 123, value: 'Germany' }, { key: 127, value: 'Spain' }, { key: 125, value: 'Portugal' }, ]]; const map = {}; parentArray.forEach(arr => { arr.forEach(obj => { const { key, value } = obj; if(map[key]){ map[key].push(value); }else{ map[key] = [value] } }) }); console.log(map);
ผลลัพธ์ในคอนโซลจะเป็น -
{ '123': [ 'India', 'Germany' ], '124': [ 'USA', 'Kenya' ], '125': [ 'Japan', 'Portugal' ], '126': [ 'Denmark', 'UK' ], '127': [ 'Austria', 'Spain' ] }