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

จัดกลุ่มออบเจกต์ตาม key property ใน JavaScript

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