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

จัดกลุ่มค่าตาม property เดียวกัน - JavaScript

สมมติว่าเรามีอาร์เรย์ดังนี้:

const arr = [
  {unit: 35, brand: 'CENTURY'},
  {unit: 35, brand: 'BADGER'},
  {unit: 25, brand: 'CENTURY'},
  {unit: 15, brand: 'CENTURY'},
  {unit: 25, brand: 'XEGAR'}
];

เราต้องเขียนฟังก์ชันที่จัดกลุ่ม property brand ของอ็อบเจกต์ที่มีค่า unit เหมือนกัน

สำหรับอาร์เรย์ข้างต้น อาร์เรย์ใหม่ควรเป็น:

const output = [
  {unit: 35, brand: 'CENTURY, BADGER'},
  {unit: 25, brand: 'CENTURY, XEGAR'},
  {unit: 15, brand: 'CENTURY'}
];

เราจะวนลูปผ่านอาร์เรย์ ค้นหาอ็อบเจกต์ที่มีค่า unit โดยใช้ฟังก์ชันช่วย ถ้ามีอยู่แล้ว ให้ต่อค่า brand เข้าไป มิฉะนั้น สร้างอ็อบเจกต์ใหม่

ตัวอย่าง

โค้ดต่อไปนี้เป็นตัวอย่าง:

const arr = [
  {unit: 35, brand: 'CENTURY'},
  {unit: 35, brand: 'BADGER'},
  {unit: 25, brand: 'CENTURY'},
  {unit: 15, brand: 'CENTURY'},
  {unit: 25, brand: 'XEGAR'}
];

const indexOf = function(unit){
  return this.findIndex(el => el.unit === unit)
};
Array.prototype.indexOf = indexOf;

const groupArray = arr => {
  const res = [];
  for(let i = 0; i < arr.length; i++){
    const ind = res.indexOf(arr[i].unit);
    if(ind !== -1){
      res[ind].brand += `, ${arr[i].brand}`;
    }else{
      res.push(arr[i]);
    }
  };
  return res;
};

console.log(groupArray(arr));

ผลลัพธ์

จะแสดงผลในคอนโซลดังนี้:

[
  { unit: 35, brand: 'CENTURY, BADGER' },
  { unit: 25, brand: 'CENTURY, XEGAR' },
  { unit: 15, brand: 'CENTURY' }
]