Cách sử dụng map() trong JavaScript

Ngày đăng: 22/01/2021   -    Cập nhật: 22/01/2021
Trong hướng dẫn này, bạn sẽ học cách sử dụng phương thức map() trong JavaScript để chuyển đổi các phần tử trong một mảng qua các ví dụ minh họa.


Phương thức map() trong JavaScript


Giới thiệu về phương thức map() trong JS



Đôi khi, bạn cần lấy một mảng, biến đổi các phần tử của nó và đưa các kết quả vào một mảng mới.


Thông thường, bạn sử dụng vòng lặp for để lặp qua các phần tử, chuyển đổi từng phần tử riêng lẻ và đẩy kết quả vào một mảng mới.


Hãy xem một ví dụ bên dưới.



Giả sử rằng bạn có một mảng số nguyên trong đó mỗi phần tử đại diện cho bán kính của một hình tròn như sau:



let mangBanKinh = [103050];
 


Phần sau minh họa cách tính diện tích của mỗi hình tròn và đẩy kết quả vào một mảng mới.



let arrDienTich = []; // Để chứa diện tích
let dienTich = 0;

// Tính diện tích của các hình tròn
for (let i = 0i < arrBanKinh.lengthi++) {

    // diện tích = PI * R * R
    dienTich = Math.floor(Math.PI * arrBanKinh[i] * arrBanKinh[i]);

    // Thêm diện tích vào mảng mới(cuối mảng)
    arrDienTich.push(dienTich);
}

// In ra mảng diện tích
console.log(arrDienTich);
 


Kết quả:



[314, 2827, 7853]
 


Nói chung, chúng ta cần khá nhiều code để thực hiện tính diện tích các hình tròn ở trên.


Bắt đầu từ ES5, kiểu Array trong JavaScript cung cấp phương thức map() cho phép bạn chuyển đổi các phần tử của mảng theo cách rõ ràng hơn.




let arrBanKinh = [103050];

// Tạo hàm tính diện tích
function tinhDienTich(banKinh) {
    return Math.floor(Math.PI * banKinh * banKinh);
}

// Sử dụng map() tạo một mảng mới, và áp dụng
// hàm tính diện tích cho từng phần tử
// trong mảng arrBanKinh
let arrDienTich = arrBanKinh.map(tinhDienTich);

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


Chúng ta cũng có được kết quả như trên.


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


  • Đầu tiên, chúng ta định nghĩa một hàm tính diện tích của một hình tròn.
  • Sau đó, truyền hàm tinhDienTich vào phương thức map(). Phương thức map() sẽ gọi hàm tinhDienTich trên mỗi phần tử của mảng arrBanKinh và trả về một mảng mới với các phần tử đã được biến đổi.


Để ngắn gọn hơn, bạn có thể chuyển vào phương thức map() một hàm ẩn danh như sau.



let arrBanKinh = [103050];

// Sử dụng hàm ẩn danh
let arrDienTich = arrBanKinh.map(function(banKinh) {
    return Math.floor(Math.PI * banKinh * banKinh);
});

console.log(arrDienTich);
 


Ngoài ra, bạn có thể sử arrow function trong ES6 để đạt được kết quả tương tự với code rõ ràng hơn:



// Sử dụng arrow function
let arrDienTich = arrBanKinh.map(
    banKinh => Math.floor(Math.PI * banKinh * banKinh)
);

console.log(arrDienTich);
 


Ngoài ra, chúng ta có thể viết chương trình trên một cách "clean code" như thế này:



// Tạo hàm tính diện tích
let tinhDienTich = r => Math.floor(Math.PI * r * r);

// Mảng chứa các bán kính
const banKinh = [103050];

// Tính diện tích theo từng bán kinh
const arrDienTich = banKinh.map(tinhDienTich);

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


Chi tiết phương thức map() trong JavaScript



Cú pháp phương thức map().



arrayObject.map(callback[, contextObject]);
 


  • Phương thức map() gọi một hàm call back trên mọi phần tử của mảng và trả về một mảng mới chứa kết quả.
  • Phương thức map() nhận hai đối số được đặt tên, đối số đầu tiên là bắt buộc, trong khi đối số thứ hai là tùy chọn.


Tương tự như các phương thức lặp khác như every(), some(), filter(), forEach() và sort(), hàm callback() có dạng sau:



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


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


  • currentElement: (Bắt buộc) Là phần tử hiện tại của mảng đang được xử lý.
  • index: (Tùy chọn) Là chỉ mục của currentElement
  • array: (Tùy chọn) Là đối tượng mảng được duyệt qua.


Nếu bạn chuyển contextObject vào phương thức map (), bạn có thể tham chiếu contextObject bên trong hàm callback() bằng cách sử dụng từ khóa this.


Điều quan trọng cần lưu ý là phương thức map() không thay đổi mảng ban đầu, nó tạo ra một mảng mới gồm tất cả các phần tử đã được biến đổi bởi hàm callback().



Một số ví dụ về cách sử dụng map() trong JavaScript



Đây là một ví dụ tạo một mảng bình phương từ một mảng mới:



// Tạo một hàm lát nữa sử dụng
const binhPhuong = x => x * x;

// Chúng ta có 1 mảng
const mangBanDau = [23456];

// Gọi hàm trên từng phần tử
const mangBinhPhuong = mangBanDau.map(binhPhuong);

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


Kết quả:



[4, 9, 16, 25, 36]
 


Ví dụ sau đây cho thấy cách biến đổi một mảng số bằng cách sử dụng một phương thức có sẵn của Math để làm hàm callback().



let mangSo = [162536];

// Tính căn bậc 2 của từng phần tử trong mảng
let ketQua = mangSo.map(Math.sqrt);

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


Kết quả:



[4, 5, 6]
 


Ví dụ: Ghép họ và tên bằng cách sử dụng map()



const sinhVien = [
    { ho: "Đặng"ten: "Ngọc Anh" },
    { ho: "Vi"ten: "Tiểu Bảo" },
    { ho: "Hàn"ten: "Lập" }
];

function layTenDayDu(sv) {

    // Ghép họ và tên bằng hàm join()
    let hoVaTen = [sv.hosv.ten].join(" ");
    return hoVaTen;
}

let tenDayDu = sinhVien.map(layTenDayDu);
console.log(tenDayDu);
 


Kết quả:



["Đặng Ngọc Anh", "Vi Tiểu Bảo", "Hàn Lập"]
 


Ví dụ: Định dạng lại các Array Object


Chúng ta có một đối tượng sinhVien như thế này:




const SinhVien = [
    { msv: "SV1"ten: "Ngọc Anh" },
    { msv: "SV2"ten: "Tiểu Bảo" },
    { msv: "SV3"ten: "Hàn Lập" }
];
 


Bây giờ chúng ta muốn tạo một đối tượng mới trong đó có tên sinh viên và độ dài tên của từng sinh viên, ta làm như sau:



const doDaiTenSinhVien = SinhVien.map(sv => {
    const obj = {};

    obj[sv.msv] = sv.ten;
    obj.doDaiTen = sv.ten.length;

    return obj
});

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


Tổng kết về map() trong JS



Trong bài hướng dẫn này, bạn đã học được cách sử dụng phương thức map() trong JavaScript để biến đổi các phần tử của mảng theo một hàm tùy biến.


Bạn sẽ sử dụng nhiều đến map() khi đi làm thực tế hoặc sử dụng Front end Framework (như React.js). Vì thế, luyện tập thêm để hiểu hơn bạn nhé.


Chúc bạn học tốt.



---
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!