Lọc phần tử trong mảng một chiều và đa chiều
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
- 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.
- 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
Các bài viết liên quan
Tài sản phương pháp trong lớp Number
Cùng nhau tìm hiểu các tài sản và phương pháp trong lớp NumberJavascriptCác phương pháp và tài sản của lớp String
Chúng ta cùng tìm hiểu qua các phương pháp và tài sản của lớp String nhé.JavascriptPhá vỡ đối tượng thành các biến trong javascript
Destructuring là một kỹ thuật rất phổ biến trong js. Các bạn chưa biết thì nên tìm hiểu nó thật kỹ.JavascriptViết hoa ký tự bất kỳ trong chuỗi
Tùy theo vị trí bạn truyền vào. Log nó ra bản điều khiểnGiải Thuật