NỘI DUNG BÀI VIẾT
Cách thay đổi mảng ban đầu trong JavaScript là gì ?Đó là một câu hỏi thực sự của một người phỏng vấn mà một nửa số người được hỏi không thể trả lời tốt. Hôm nay, chúng ta hãy cùng nhau đào sâu.
ForEach () có thể sửa đổi mảng gốc không?
Trường hợp 1: Phần tử là kiểu dữ liệu nguyên thủy
cho arr = [1, 2, 3];
arr.forEach ((item) => {item = item * 2;});
console.log (arr); // kết quả : [1, 2, 3]
Kết quả:Failed
Trường hợp 2: Phần tử là kiểu dữ liệu tham chiếu
let arr = [
{"name": "David", "age": 20},
{"name": "Peter", "age": 21},
{"name": "Bruce", "age": 22 }];
arr.forEach ((item) => {item = {"name": "Bob", "age": 23};});
console.log (JSON.stringify (arr));
// kết quả
// [{"name": "David", "age": 20},
// {"name": "Peter", "age": 21},
// {"name": "Bruce" , "tuổi": 22}]
Kết quả:Failed
Trường hợp 3: Phần tử là kiểu dữ liệu tham chiếu (Bên sửa đổi)
let arr = [
{"name": "David", "age": 20},
{"name": "Peter", "age": 21},
{"name": "Bruce", "age": 22 }];
arr.forEach ((item) => {item.name = "bob";});
console.log (JSON.stringify (arr));
// kết quả
// [{"name": "bob", "age": 20},
// {"name": "bob", "age": 21},
// {"name": "bob" , "tuổi": 22}]
Kết quả:Success
Vì vậy, trên thực tế, forEach()
sẽ không trực tiếp thay đổi đối tượng gọi nó, nhưng đối tượng đó có thể được thay đổi bởi hàm gọi lại. Logic ở trên rất dễ hiểu nếu bạn hiểu rằng phép gán kiểu dữ liệu cơ bản là chuyển giá trị, và phép gán kiểu dữ liệu tham chiếu là chuyển địa chỉ tham chiếu.
Cách đúng đắn để sửa đổi mảng ban đầu
Trường hợp 1: Phần tử là kiểu dữ liệu nguyên thủy
cho arr = [1, 2, 3];
arr.forEach ((item, index, array) => {
array [index] = array [index] * 2;
});
console.log (arr); // kết quả : [2, 4, 6]
Trường hợp 2: Phần tử là kiểu dữ liệu tham chiếu
let arr = [
{"name": "David", "age": 20},
{"name": "Peter", "age": 21},
{"name": "Bruce", "age": 22 }];
arr.forEach ((item, index, array) => {array [index] = {"name": "Bob", "age": 23};});
console.log (JSON.stringify (arr));
// kết quả
// [{"name": "Bob", "age": 20},
// {"name": "Bob", "age": 21},
// {"name": "Bob" , "tuổi": 22}]
Trường hợp 3: Phần tử là kiểu dữ liệu tham chiếu (Bên sửa đổi)
let arr = [
{"name": "David", "age": 20},
{"name": "Peter", "age": 21},
{"name": "Bruce", "age": 22 }];
arr.forEach ((item, index, array) => {array [index] .name = "bob";});
console.log (JSON.stringify (arr));
// kết quả
// [{"name": "bob", "age": 20},
// {"name": "bob", "age": 21},
// {"name": "bob" , "tuổi": 22}]
Kết luận
Nếu bạn chỉ muốn liệt kê mảng, bạn có thể sử dụng phương thức forEach ()
Tuy nhiên, nếu bạn muốn thay đổi nội dung của các phần tử trong mảng khi đang liệt kê, thì cách tốt nhất là sử dụng map()
phương thức này. Phương map()
thức tự nó sẽ trả về một mảng hoàn toàn mới sau khi xử lý, đưa ra một kỳ vọng rõ ràng rằng dữ liệu được sửa đổi sẽ được trả về, không sử dụng forEach()
phương thức để tránh một số lỗi cấp thấp.
Cảm ơn bạn đã theo dõi bài viết!
Các bạn có thể tham khảo các bài viết hay về JavaScript tại đây.
Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.
TỔNG HỢP TÀI LIỆU HỌC LẬP TRÌNH CƠ BẢN CHO NGƯỜI MỚI BẮT ĐẦU
KHOÁ HỌC BOOTCAMP JAVA/JAVASCRIPT/PHP TRỞ THÀNH LẬP TRÌNH VIÊN TRONG 5-6 THÁNG