Trong bài này chúng ta sẽ tìm hiểu hàm filter trong javascript, đây là hàm dùng để lặp qua các phần tử trong mảng, dùng để lọc các phần tử trong mảng theo một điều kiện nào đó.
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức.
Hàm filter được tích hơp sẵn trong đối tượng mảng giống như hàm map trong javascript. Về cách thức hoạt động thì nó giống hàm map, nghĩa là nó sẽ có một tham số dạng function và function này sẽ xử lý cho mỗi lần lặp. Nếu function return true thì phần tử lần lặp đó được chấp nhận, ngược lại sẽ không được chấp nhận.filter được tích hơp sẵn trong đối tượng mảng giống như hàm map trong javascript. Về cách thức hoạt động thì nó giống hàm map, nghĩa là nó sẽ có một tham số dạng function và function này sẽ xử lý cho mỗi lần lặp. Nếu function return true thì phần tử lần lặp đó được chấp nhận, ngược lại sẽ không được chấp nhận.
1. Filter trong javascript là gì?
Filter trong Javascript là một phương thức thuộc đối tượng mảng. Nó có công dụng đúng ý nghĩa với tên gọi của nó, tức là sẽ lặp qua qua các phần tử, sau đó tùy vào từng bài toán mà sẽ quyết định chọn phần tử đó hay không. Cuối cùng hàm này sẽ trả về một mảng các phần tử đã chọn.
Cú pháp của filter trong js như sau:
Bài viết này được đăng tại [free tuts .net]
objectArray.filter[function[value]{ return true / false; }];
Nếu
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return true; }]; console.log[selected_number];// 100, 200, 300, 400, 5005 thì phẩn tử được chọn, ngược lại
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return true; }]; console.log[selected_number];// 100, 200, 300, 400, 5006 thì phần tử không được chọn. Còn
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return true; }]; console.log[selected_number];// 100, 200, 300, 400, 5007 chính là giá trị của mỗi phần tử trong mỗi lần lặp.
Ví dụ 1: Dùng dụng hàm filter với lệnh return true.: Dùng dụng hàm filter với lệnh return true.
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return true; }]; console.log[selected_number];// 100, 200, 300, 400, 500
Như bạn thấy, mảng mới có tổng số phần tử và giá trị của chúng không khác gì mảng cũ.
Ví dụ 2: Dùng hàm filter với lệnh return false.: Dùng hàm filter với lệnh return false.
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
Kết quả trả về một mảng không có phần tử nào, lý do là ta đã return false cho mọi tường hợp.return false cho mọi tường hợp.
Ví dụ 3: Tạo mảng mới từ mnagr numbers và bỏ đi phần tử 300.: Tạo mảng mới từ mnagr numbers và bỏ đi phần tử 300.
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ if [value == 300]{ return false; } return true; }]; console.log[selected_number]; // 100, 200, 400, 500
Kết quả là phần tử có giá trị 300 đã biến mất.
2. Ví dụ hàm filter trong javascript
Ta sẽ làm thêm một ví dụ nữa để giúp các bạn dễ hình dung hơn nhé.
Ví dụ: Lấy các phần tử chẵn trong mảng cho trước.
Với bài này thì ta có hai cách, thứ nhất là sử dụng hàm filter, và thứ hai là sử dụng vòng lặp for.
Cách 1: Sử dụng hàm filter
var numbers = [5, 10, 20, 22, 60, 75, 90]; var new_numbers = numbers.filter[function[item]{ return [item % 2 == 0]; }]; console.log[new_numbers]; // Kết quả: [10, 20, 22, 60, 90]
Cách 2: Sử dụng vòng lặp for
Một cách giải khác sử dụng vòng lặp for.
var numbers = [5, 10, 20, 22, 60, 75, 90]; var new_numbers = []; for [var i = 0; i < numbers.length; i++]{ if [numbers[i] % 2 == 0]{ new_numbers.push[numbers[i]]; } } console.log[new_numbers]; // Kết quả: [10, 20, 22, 60, 90]
3. Lời kết
Như vậy là mình đã hướng dẫn xong cách sử dụng vòng lặp foreach trong Javascript. Lưu ý là hàm này ta chỉ có thể sử dụng với mảng thôi nhé. Nếu bạn muốn sử dụng với đối tượng object thì tham khảo vòng lặp forEach nhé.
Kết lại thì mình sẽ đưa ra các điều kiện để chọn method phù hợp từng bài toán như sau:
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng0: không thay đổi length; thay đổi value mỗi phần tử; call back function trả về phần tử mới.
.map
Mục đích:var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng1: thay đổi length; không thay đổi value mỗi phần tử; call back function trả về giá trị
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ if [value == 300]{ return false; } return true; }]; console.log[selected_number]; // 100, 200, 400, 5002.Điểm lưu ý:
- Trả về một data
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ if [value == 300]{ return false; } return true; }]; console.log[selected_number]; // 100, 200, 400, 500
5 mới so vớivar numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
4 ban đầu.length bằng với length của array ban đầu. var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
2 sẽ không làm thay đổi array ban đầu.đã biến đổi [đây là giá trị trả về củavar numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
7 trongvar numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
0].- Example 1: biến đổi thành một array mới
.filter
Mục đích:Example 3: biến đổi thành một string mới
Điểm lưu ý:- Trả về một data
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ if [value == 300]{ return false; } return true; }]; console.log[selected_number]; // 100, 200, 400, 500
5 mới so vớivar numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
4 ban đầu. var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
2 sẽ không làm thay đổi array ban đầu.length nhỏ hơn hoặc bằng với length của array ban đầu.- Example 1: biến đổi thành một array mớikhông biến đổi.
- Example 2: biến đổi thành một object mới
const beforeColors = ["red", "blue", "green", "black"];
const afterColors = beforeColors.filter[[item, index] => item.startsWith["b"]];
console.log['beforeColors', beforeColors];
// beforeColors ["red", "blue", "green", "black"]
console.log['afterColors', afterColors];
// afterColors ["blue", "black"]
.reduce
Mục đích:Trả về một
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ if [value == 300]{ return false; } return true; }]; console.log[selected_number]; // 100, 200, 400, 5004 mới với kết quả: là sau khi lặp qua và thực hiện thao tác tính toán trên mỗi lần lặp.Điểm lưu ý:
- Trả về một data
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ if [value == 300]{ return false; } return true; }]; console.log[selected_number]; // 100, 200, 400, 500
5 mới so vớivar numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
4 ban đầu. var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
2 sẽ không làm thay đổi array ban đầu.
const beforeColors = ["red", "blue", "green", "black"];
const afterColors = beforeColors.reduce[[currentColors, item, index] => {
if [item.startsWith["b"]] {
return [...currentColors, `hello ${item}`];
}
return currentColors;
}, []];
console.log['beforeColors', beforeColors];
// beforeColors ["red", "blue", "green", "black"]
console.log['afterColors', afterColors];
// afterColors ["hello blue", "hello black"]
Example 2: biến đổi thành một object mớiconst beforeColors = ["red", "blue", "green", "black"];
const afterColorObj = beforeColors.reduce[[currentColors, item, index] => {
if [item.startsWith["b"]] {
return {
...currentColors,
[`color_${item}`]: `hello ${item}`,
};
}
return currentColors;
}, {}];
console.log['beforeColors', beforeColors];
// beforeColors ["red", "blue", "green", "black"]
console.log['afterColorObj', afterColorObj];
// afterColorObj {color_blue: "hello blue", color_black: "hello black"}
Example 3: biến đổi thành một string mớivar numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return true; }]; console.log[selected_number];// 100, 200, 300, 400, 5000
.forEach
Mục đích:Dùng để lặp qua các phần tử của một
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng4 và thực hiện thao tác xử lý qua mỗi lần lặp [tương tự vòng lặp
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ if [value == 300]{ return false; } return true; }]; console.log[selected_number]; // 100, 200, 400, 5009].Điểm lưu ý:
- Trả về một data
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ if [value == 300]{ return false; } return true; }]; console.log[selected_number]; // 100, 200, 400, 500
5 mới so vớivar numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
4 ban đầu. var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
2 sẽ không làm thay đổi array ban đầu.
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return true; }]; console.log[selected_number];// 100, 200, 300, 400, 5001
Example 1: biến đổi thành một array mới
Example 2: biến đổi thành một object mới
Example 3: biến đổi thành một string mớivar numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return true; }]; console.log[selected_number];// 100, 200, 300, 400, 5002Dùng để lặp qua các phần tử của một
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng4 và thực hiện thao tác xử lý qua mỗi lần lặp [tương tự vòng lặp
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ if [value == 300]{ return false; } return true; }]; console.log[selected_number]; // 100, 200, 400, 5009].
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return true; }]; console.log[selected_number];// 100, 200, 300, 400, 5003Method này không trả về một array mới.
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return true; }]; console.log[selected_number];// 100, 200, 300, 400, 5004
Không làm thay đổi array ban đầu, chỉ đơn giản là lặp qua và thực hiện xử lý bên trong mỗi lần lặp.
Noted thêm về .forEach
- !!!
var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
3 là method lặp tổng quát củavar numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
4 và có thể dùng để thay thế bất kỳ các methods ở trên [var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
0var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
1var numbers = [100, 200, 300, 400, 500]; var selected_number = numbers.filter[function[value]{ return false; }]; console.log[selected_number]; // Rỗng
2] - Ví dụ .forEach thay thế .map
- Ví dụ .forEach thay thế .filter
- Ví dụ .forEach thay thế .reduce
Summary