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

จัดกลุ่มข้อมูล JSON ใน JavaScript ตามคีย์ที่ต้องการ

การจัดกลุ่มออบเจกต์ในอาร์เรย์ตามค่า property

ใช้ลูป for...in ร่วมกับ push() เพื่อสร้างออบเจกต์ใหม่ที่จัดกลุ่มตามชื่อ (name)

ตัวอย่างโค้ด

var details = {
  "1": { name: "John" },
  "2": { name: "John" },
  "3": { name: "David" }
};

var objectWithGroupByName = {};

for (var key in details) {
  var name = details[key].name;
  
  // ถ้ายังไม่มีกลุ่มนี้ ให้สร้างอาร์เรย์ว่าง
  if (!objectWithGroupByName[name]) {
    objectWithGroupByName[name] = [];
  }
  
  // เพิ่มออบเจกต์เข้าไปในกลุ่มที่ตรงกัน
  objectWithGroupByName[name].push(details[key]);
}

console.log(objectWithGroupByName);

วิธีรัน

node fileName.js

ผลลัพธ์

{
  John: [ { name: 'John' }, { name: 'John' } ],
  David: [ { name: 'David' } ]
}

วิธีเขียนแบบทันสมัย (ES6+)

// ใช้ reduce() สร้างกลุ่มได้กระชับกว่า
const grouped = Object.values(details).reduce((acc, obj) => {
  const name = obj.name;
  (acc[name] = acc[name] || []).push(obj);
  return acc;
}, {});

console.log(grouped);

คำอธิบาย

  • วนลูปผ่านทุก key ของออบเจกต์ต้นฉบับ
  • ตรวจสอบว่ามีกลุ่มชื่อนั้นอยู่แล้วหรือยัง (ใช้ชื่อเป็น key)
  • push ออบเจกต์เข้าไปในอาร์เรย์ของกลุ่มนั้นๆ