Cách sử dụng filter() JavaScript

Ngày đăng: 26/01/2021   -    Cập nhật: 27/01/2021
Trong hướng dẫn này, bạn sẽ được học về hàm filter trong JS, sử dụng hàm filter để lọc các phần tử trong một mảng.


Filter() trong JavaScript


Giới thiệu filter trong JS



Một trong những tác vụ phổ biến nhất khi làm việc với mảng là tạo một mảng mới chứa một tập hợp con các phần tử của mảng ban đầu.


Giả sử bạn có một mảng các đối tượng sinh viên trong đó mỗi đối tượng chứa hai thuộc tính: tentuoi




// Tạo mảng đối tượng
let sinhViens = [
    { ten: "Ngọc Anh"tuoi: 18 },
    { ten: "Tiểu Bảo"tuoi: 20 },
    { ten: "Hàn Lập"tuoi: 27 },
    { ten: "Thu Hương"tuoi: 18 },
    { ten: "Vũ Hà"tuoi: 22 }
];
 


Để tìm kiếm sinh viên có tuổi lớn hơn 18, bạn thường sử dụng vòng lặp for lặp qua các phần tử và kiểm tra thuộc tính tuoi.


Nếu đúng là tuổi lớn hơn 18 thì nhét phần tử đó vào mảng mới, như sau:




let sinhVienCungs = [];

for (let i = 0i < sinhViens.lengthi++) {
    if (sinhViens[i].tuoi > 18) {

        // Thêm phần tử vào cuối mảng mới
        sinhVienCungs.push(sinhViens[i]);
    }
}

console.log(sinhVienCungs);
 


Kết quả ta được:



[
    { ten: "Tiểu Bảo"tuoi: 20 },
    { ten: "Hàn Lập"tuoi: 27 },
    { ten: "Vũ Hà"tuoi: 22 }
]
 


Tuy nhiên, sử dụng vòng lặp for đôi khi hơi lằng nhằng, JavaScript cung cấp phương thức filter() cho phép bạn thực hiện tác vụ này một cách ngắn gọn và rõ ràng hơn.


Ví dụ sau trả về kết quả tương tự như ví dụ trên:




// Lọc phần tử sử dụng filter()
let sinhVienCungs = sinhViens.filter(function(e) {
    return e.tuoi > 18;
});
console.log(sinhVienCungs);
 


Trong ví dụ này, chúng tôi đã gọi phương thức filter() của đối tượng Array trên mảng sinhViens và truyền vào một hàm kiểm tra từng phần tử.


Bên trong hàm, chúng ta đã kiểm tra xem tuổi của sinh viên có lớn hơn 18 hay không.


Nếu đúng như vậy, hàm trả về true. Nếu không, nó trả về false.


Lúc này, Phương thức filter() chỉ lọc ra các phần tử mà thỏa màn hàm kiểm tra của chúng ta truyền vào.


Ngoài ra, bạn có thể sử dụng Arrow function (trong ES6) và cách viết "Clean code" như thế này để lọc sinh viên có tuổi lớn hơn 18.




// Tạo hàm kiểm tra tuổi > 18
let lonHon18Tuoi = e => e.tuoi > 18;

// Lọc tuổi lớn hơn 18 với hàm filter()
let sinhVienCungs = sinhViens.filter(lonHon18Tuoi);

// In ra kết quả
console.log(sinhVienCungs);
 


Hoặc viết ngắn hơn như thế này:



// Lọc sinh viên lớn hơn 18 tuổi
let sinhVienCungs = sinhViens.filter(e => e.tuoi > 18);

// In ra kết quả
console.log(sinhVienCungs);
 


Cách này thì không dễ đọc cho lắm. Nhưng nó ngắn.


Chi tiết hàm filter trong JavaScript



Cú pháp của hàm filter() trong Javascript như sau:



arrayObject.filter(callbackcontextObject);
 


Phương thức filter() tạo một mảng mới bao gồm tất cả các phần tử vượt qua phép kiểm tra được thực hiện bởi hàm callback().


> Tìm hiểu thêm về Call Back trong JavaScript


Bên trong, phương thức filter() lặp qua từng phần tử của mảng và truyền từng phần tử vào hàm callback để kiểm tra.



  • Nếu hàm callback trả về true, nó bao gồm phần tử trong mảng trả về.


Phương thức filter() chấp nhận hai đối số được đặt tên:


  • Một hàm callback
  • Và một đối tượng tùy chọn.


Giống như các phương thức lặp khác của đối tượng Array như every(), some(), map() và forEach(), hàm callback có dạng sau:



function callback(currentElementindexarray) {
    // ...
}
 


Hàm callback nhận ba đối số:


  • currentElement: là phần tử hiện tại trong mảng đang được xử lý bởi hàm callback.
  • index: Tùy chọn. Là chỉ mục của currentElement đang được xử lý bởi hàm callback.
  • array: Tùy chọn. Là đối tượng mảng đang được duyệt qua.


Đối số contexObject của phương thức filter() cũng là tùy chọn.


Nếu bạn truyền giá trị này, bạn có thể tham chiếu nó bằng cách sử dụng từ khóa this bên trong hàm callback.


Điều quan trọng cần lưu ý là phương thức filter() không thay đổi mảng ban đầu.



Ví dụ sử dụng hàm filter JavaScript




Vì phương thức filter() trả về một mảng mới, bạn có thể xâu chuỗi kết quả với các phương thức lặp khác như sort()map().


Ví dụ: Phần sau minh họa cách liên kết ba phương thức: filter(), sort() và map()




// Tạo mảng đối tượng
let sinhViens = [
    { ten: "Ngọc Anh"tuoi: 18 },
    { ten: "Tiểu Bảo"tuoi: 20 },
    { ten: "Hàn Lập"tuoi: 27 },
    { ten: "Thu Hương"tuoi: 18 },
    { ten: "Vũ Hà"tuoi: 22 }
];


// Kết hợp filter(), sort() và map()
sinhViens
    .filter(sv => sv.tuoi < 25)
    .sort((sv1sv2=> sv1.tuoi - sv2.tuoi)
    .map(sv => console.log(sv.ten + ':' + sv.tuoi));
 


Kết quả ta được:



Ngọc Anh: 18
Thu Hương: 18
Tiểu Bảo: 20
Vũ Hà: 22
 


Nó hoạt động như thế nào?


  • Đầu tiên, phương thức filter() trả về các sinh viên có tuổi nhỏ hơn 20
  • Thứ hai, phương thức sort() sắp xếp sinh viên theo tuổi tăng dần
  • Thứ ba, phương thức map() hiển thị từng phần tử trong mảng kết quả trong console.


Ví dụ sau minh họa việc sử dụng đối số contextObject chỉ định một đối tượng có thể được tham chiếu trong hàm callback() thông qua từ khóa this.



// Tạo hàm kiểm tra giá trị phù hợp
// nằm trong khoảng nhất định
function giaTriPhuHop(giaTri) {
    if (typeof giaTri !== 'number') {
        return false;
    }
    return giaTri >= this.canDuoi && giaTri <= this.canTren;
}

// Dữ liệu cần phải lọc
let duLieu = [1020"30"15"Filter JS"undefined"ABC"];

// Tạo khoảng giá trị
let khoang = {
    canDuoi: 1,
    canTren: 10
};

// Lọc giá trị bằng hàm filter()
let giaTriNamTrongKhoang = duLieu.filter(giaTriPhuHopkhoang);

console.log(giaTriNamTrongKhoang); // [10, 1, 5]
 


Chương trình trên hoạt động như sau:


  • Đầu tiên, chúng ta tạo hàm giaTriPhuHop() để kiểm tra xem đối số của nó có phải là một số hay không và lớn hơn hoặc bằng cận dưới, nhỏ hơn hoặc bằng cận trên.
  • Tiếp theo, tạo ra một mảng chứa dữ liệu hỗn hợp để lát sử dụng để lọc.
  • Sau đó, xác định đối tượng khoang với cận trên và cận dưới.
  • Sau đó, gọi các phương thức filter() trên mảng duLieu và truyền vào hàm giaTriPhuHop() và đối tượng khoang. Bởi vì chúng ta truyền vào đối tượng khoang, thế nên bên trong hàm giaTriPhuHop, từ khóa this tham chiếu đến đối tượng khoang.
  • Cuối cùng, hiển thị mảng đã lọc trong console


Tổng kết về hàm filter JS



Như vậy, trong hướng dẫn này, bạn đã học cách sử dụng phương thức filter() của JS để lọc các phần tử trong một mảng theo điều kiện kiểm tra được cung cấp bởi một hàm callback.


Nếu có phần nào chưa hiểu rõ, vui lòng để lại bình luận bên dưới để được giải đáp thêm.


> Và nếu muốn học lập trình web nhanh hơn thì có thể đăng ký khóa học offline HỌC LẬP TRÌNH JAVA WEB hoặc HỌC LẬP TRÌNH PHP với chuyên gia ngay!


---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0968051561
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
 
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python
Bình luận Facebook
Khóa học liên quan đến bài viết

Khóa học PHP Full stack [2023] cho người mới bắt đầu

96 giờ
Khóa học Lập trình PHP Full stack, phiên bản cập nhật lần thứ 8. Dạy Lập trình PHP bài bản từ Front end đến Back end + Laravel. Hướng dẫn làm 2 Dự Án Web lớn

KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG

50 giờ
Khóa học giúp học viên sử dụng thành thạo ngôn ngữ Lập trình Python (3x). Hiểu và phát triển được Ứng dụng Web với Django Framework. Học thực hành với Giảng viên cao cấp.

Lập trình PHP với Laravel Framework

42 giờ
Khóa học Lập trình PHP với Laravel Framework được NIIT - ICT HÀ NỘI xây dựng nhằm hoàn thiện kỹ năng lập trình web các các bạn đã biết Lập trình Web PHP thuần.

Khóa học Java Full stack (IJFD)

104 giờ
Học lập trình Java Fullstack với khóa học được xây dựng theo lộ trình bài bản, từ JAVA CƠ BẢN đến JAVA WEB và nâng cao về JAVA FRAMEWORK như: Spring Boot, Hibernate
Mục lục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!