เรามี parentArray ที่มีหลายซับอาร์เรย์ แต่ละซับอาร์เรย์มีขนาดเท่ากัน แต่ละซับอาร์เรย์เป็นอาร์เรย์ของออบเจกต์ที่มีสองพร็อพเพอร์ตี: key และ value ภายในซับอาร์เรย์ ยืนยันได้ว่าออบเจกต์สองตัวไม่สามารถมี key เดียวกันได้ แต่ทุกซับอาร์เรย์มีคู่ key n คู่ที่เหมือนกัน โดยที่ n คือขนาดของซับอาร์เรย์
หน้าที่ของเราคือเตรียมออบเจกต์ที่มี key เป็น key ของออบเจกต์ และ value เป็นอาร์เรย์ที่มีค่าทั้งหมดสำหรับ key นั้นๆ
นี่คือ parent array ตัวอย่าง:
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' },
]];
เราจะวนลูปผ่าน parent array และซับอาร์เรย์ทีละอัน และถ้าเราพบ key ที่ตรงกัน เราจะ push ลงใน value array มิฉะนั้นเราจะสร้าง value array ใหม่
โค้ดเต็มสำหรับเรื่องนี้จะเป็น:
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' ]
}