เรามี 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' ]
}