Mô tả bài toán
Cho mảng đối tượng main và mảng tên names. Lọc main giữ lại các đối tượng có name nằm trong names (sửa đổi tại chỗ).
Ví dụ minh họa
const main = [
{name: "Karan", age: 34},
{name: "Aayush", age: 24},
{name: "Ameesh", age: 23},
{name: "Joy", age: 33},
{name: "Siddarth", age: 43},
{name: "Nakul", age: 31},
{name: "Anmol", age: 21}
];
const names = ["Karan", "Joy", "Siddarth", "Ameesh"];
const filterUnwanted = (main, names) => {
for (let i = 0; i < main.length; ) {
if (names.includes(main[i].name)) {
i++; continue;
}
main.splice(i, 1);
}
};
filterUnwanted(main, names);
console.log(main);
Kết quả
[ { name: 'Karan', age: 34 }, { name: 'Ameesh', age: 23 }, { name: 'Joy', age: 33 }, { name: 'Siddarth', age: 43 } ]
Cách viết hàm thuần túy (immutable)
const filterByNames = (arr, names) => arr.filter(obj => new Set(names).has(obj.name));
Ưu điểm
Dùng Set tra cứu O(1), không thay đổi mảng gốc, code rõ ràng hơn.