🦊 Lọc Phần Tử 🦊

Lọc phần tử trong mảng một chiều và đa chiều

Trong bài viết này chúng ta cùng nhau lọc phần tử theo cách mà chúng ta truyền vào nhé.
js_masterGiải Thuật
giải thuật.jpg

Chào các bạn

Trong bài viết này chúng ta cùng nhau lọc phần tử theo cách mà chúng ta truyền vào nhé.

Giải pháp

Có rất rất là nhiều cách giải nhưng ở đây mình sẽ làm thao 2 cách. Một là tự viết chức năng để cho bạn dễ hình dung. Hai là áp dụng chức năng có sẵng

Bắt đầu nào

  1. Chức năng tự viết
1let arr = [1, 3, 2, 5, 6, 9];
2
3/**
4 *
5 * @param {array} arr - Một mảng number đầu vào
6 * @param {number} number - Một số chúng ta cần lọc
7 * @returns
8 */
9function filterNumber(arr, number) {
10    if (!Array.isArray(arr)) {
11        throw new Error(`Type ${typeof arr} không phải là mảng`);
12    }
13
14    if (typeof number !== "number" || !isFinite(number)) {
15        throw new Error(`Number không phải là số`);
16    }
17
18    let ketQua = [];
19
20    for (let v of arr) {
21        if (v === number) {
22            ketQua.push(v);
23        }
24    }
25
26    return ketQua;
27}
28
29let ketQua = filterNumber(arr, 2);
30
31console.log(ketQua); // [2]

Như các bạn có thể thấy. Nếu có nhiều số 2 trong mảng arr thì kết quả đầu ra sẽ là một mảng các số 2.

  1. Phương pháp có sẵng
1let arr = [1, 3, 2, 5, 6, 9];
2
3/**
4 *
5 * @param {array} arr - Một mảng number đầu vào
6 * @param {number} number - Một số chúng ta cần lọc
7 * @returns
8 */
9function filterNumber(arr, number) {
10    if (!Array.isArray(arr)) {
11        throw new Error(`Type ${typeof arr} không phải là mảng`);
12    }
13
14    if (typeof number !== "number" || !isFinite(number)) {
15        throw new Error(`Number không phải là số`);
16    }
17
18    // filter Phương pháp có sẵng
19    let ketQua = arr.filter((value) => value === number);
20
21    return ketQua;
22}
23
24let ketQua = filterNumber(arr, 2);
25
26console.log(ketQua); // [2]

Như các bạn có thể thấy. Bây giờ nó ngắn hơn đúng không.

Bây giờ cũng từ ví dụ đó chúng ta có đầu vào là một mảng đa chiều. Thay cho mảng một chiều như trên.

Ví dụ đầu vào như thế này thì chúng ta làm thế nào?

1let arr = [1, 3, 2, [2, 4, 5], [9, 10, [2, 3, [10, 1]], 3, 2], 5, 6, 9];

Cũng không có gì khó. Dùng giải pháp có sẵng. Chỉ logic tí là ra thôi.

1let arr = [1, 3, 2, [2, 4, 5], [9, 10, [2, 3, [10, 1]], 3, 2], 5, 6, 9];
2
3/**
4 *
5 * @param {array} arr - Một mảng number đầu vào
6 * @param {number} number - Một số chúng ta cần lọc
7 * @returns
8 */
9function filterNumber(arr, number) {
10    if (!Array.isArray(arr)) {
11        throw new Error(`Type ${typeof arr} không phải là mảng`);
12    }
13
14    if (typeof number !== "number" || !isFinite(number)) {
15        throw new Error(`Number không phải là số`);
16    }
17
18    // filter Phương pháp có sẵng
19    let ketQua = arr.flat(Infinity).filter((value) => value === number);
20
21    return ketQua;
22}
23
24let ketQua = filterNumber(arr, 2);
25
26console.log(ketQua); // [2, 2, 2, 2]

Như bạn thấy ví dụ trên có 4 số 2 đúng không. Từ ví dụ số đó. Bây giờ thay nó bằng đối tượng thì các bạn cũng biết cách làm đúng ko.

Bây giờ chúng ta thay nó thành mảng đa chiều object nhé.

1let arr = [
2    {
3        name: "User 1",
4    },
5    {
6        name: "User 2",
7    },
8    [
9        {
10            name: "User 3",
11        },
12        {
13            name: "User 2",
14        },
15        [
16            {
17                name: "User 4",
18            },
19            {
20                name: "User 5",
21            },
22        ],
23        {
24            name: "User 2",
25        },
26    ],
27    {
28        name: "User 2",
29    },
30];
31
32/**
33 *
34 * @param {array} arr - Một mảng number đầu vào
35 * @param {string} name- Một name chúng ta cần lọc
36 * @returns
37 */
38function filterNumber(arr, name) {
39    if (!Array.isArray(arr)) {
40        throw new Error(`Type ${typeof arr} không phải là mảng`);
41    }
42
43    if (typeof name !== "string") {
44        throw new Error(`Name không phải là chuỗi`);
45    }
46
47    // filter Phương pháp có sẵng
48    let ketQua = arr.flat(Infinity).filter((value) => value.name === name);
49
50    return ketQua;
51}
52
53let ketQua = filterNumber(arr, "User 2");
54
55console.log(ketQua); // [{…}, {…}, {…}, {…}]

Đơn nhiên là còn rất rất nhiều giải pháp khác nữa. Các bạn biết thì tự giải xem sao nhé.

Tổng kết

Trong bài viết này mình đã hướng dẫn các bạn lọc số và lọc name trong mảng một chiều và đa chiều.

Ok các bạn

  • đếm
  • lọc
  • tìm kiếm
  • mảng
  • chuỗi

OFFJS.COM - Blog học tập giải trí - 🐲

Chia sẻ nhiều kiến thức thú vị trong lập trình cũng như cuộc sống.

Giới thiệu


Trang web này mình sẽ nói về kiến thức lập trình và cuộc sống mà các bạn mới học hay đang dự định học. Có một bước đi đầu đời vững chắc.

Hồ Quang Trí.jpg

Đi kèm với đó là những lý thuyết và các dòng code minh họa. Để các bạn dễ hình dung.

Đơn nhiên cũng không dễ dàng ngày một ngày hai mà học hết được.

Học Tập Là Một Con Đường Dài Vô Tận

Nó sẽ nuốt các bạn vô số thời gian nhưng bù lại khi đã biết thì mọi thứ thật là tuyệt.

1console.log("Hồ Quang Trí");

Nếu có ai nói bạn học lập trình trong vòng 3 đến 6 tháng thì mình xin nói thật không bao giờ có chuyện đó nhé.

Chúc các bạn thành công.

Chân trang

phone-toan-phat.png

0353210168

address-toan-phat.png

Việt Nam