Hướng dẫn javascript foreach filter - bộ lọc foreach javascript

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 đó.

Hướng dẫn javascript foreach filter - bộ lọc foreach javascript

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, 500
5 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, 500
6 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, 500
7 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ỗng
0: 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ỗng
1: 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, 500
2.

Đ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ới
    var 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ủa
    var numbers = [100, 200, 300, 400, 500];
    
    var selected_number = numbers.filter(function(value){
        return false;
    });
    
    console.log(selected_number); // Rỗng
    7 trong
    var 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
Example:
Example 2: biến đổi thành một object 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ới
    var 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
Example:
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, 500
4 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ới
    var 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.
Example 1: biến đổi thành một array mới
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ới
const 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ớ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, 500
0

.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ỗng
4 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, 500
9).

Đ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ới
    var 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.
Example:
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
1

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ớ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, 500
2
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ỗng
4 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, 500
9).
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
3
Method 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, 500
4

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ủa
    var 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
    0
    var numbers = [100, 200, 300, 400, 500];
    
    var selected_number = numbers.filter(function(value){
        return false;
    });
    
    console.log(selected_number); // Rỗng
    1
    var 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