Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

จัดกลุ่มอ็อบเจกต์ภายในอาร์เรย์ซ้อนใน JavaScript

สมมติว่าเรามี parentArray ที่มีหลายซับอาร์เรย์ ขนาดเท่ากันทุกตัว แต่ละซับอาร์เรย์เป็นอาร์เรย์ของอ็อบเจกต์ที่มีสองคุณสมบัติ: key และ value ภายในซับอาร์เรย์ ยืนยันว่าไม่มีอ็อบเจกต์สองตัวที่มี key เหมือนกัน แต่ทุกซับอาร์เรย์มีคู่ key เดียวกัน n คู่ โดย n คือขนาดของซับอาร์เรย์

หน้าที่คือเตรียมอ็อบเจกต์ที่มี key เป็น key ของอ็อบเจกต์ และ value เป็นอาร์เรย์ที่มีค่าทั้งหมดสำหรับ key นั้น

อาร์เรย์ตัวอย่าง

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' ]
}