เพิ่ม 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() ในลูป