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

เพิ่ม Object ลง Array ถ้ายังไม่มีชื่อซ้ำด้วย push() และ forEach()

เพิ่ม object ใหม่เข้า array ก็ต่อเมื่อ name ไม่ซ้ำ

ใช้ forEach() วนชื่อที่จะเพิ่ม ตรวจสอบด้วย find() ก่อน push

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


var details = [{ name: "John" }, { name: "David" }];
var addObject = ["Mike", "Sam"];

addObject.forEach(obj1 => {
  // find คืนค่า object แรกที่เจอ หรือ undefined
  if (!details.find(obj2 => obj2.name === obj1)) {
    details.push({ name: obj1 });
  }
});

console.log(details);

วิธีรัน

node fileName.js

ผลลัพธ์


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

คำอธิบาย

  • find() หา object ที่ obj2.name === obj1 (obj1 คือ string name)
  • !details.find(...) ถ้าไม่เจอ (undefined = falsy) จึง push เพิ่ม
  • ⚠️ โค้ดต้นฉบับมี bug: obj2 === obj1 เปรียบเทียบ object กับ string จะ false เสมอ
  • แก้เป็น obj2.name === obj1

วิธีทันสมัย: ใช้ Set ตรวจสอบความซ้ำ


const existingNames = new Set(details.map(d => d.name));
addObject.forEach(name => {
  if (!existingNames.has(name)) {
    details.push({ name });
    existingNames.add(name);
  }
});

O(n) แทน O(n²) ของ find() ในลูป