Chúng tôi được yêu cầu viết một hàm mảng JavaScript nhận vào một mảng lồng nhau và trả về một mảng có tất cả các phần tử có trong mảng mà không có bất kỳ phần tử lồng nào.
Ví dụ -
//if the input is: const arr = [[1, 2, 3], [4, 5], [6]]; //then the output should be: const output = [1, 2, 3, 4, 5, 6];
Do đó, hãy viết mã cho chức năng này -
Phương pháp 1:Sử dụng đệ quy
Ở đây, chúng tôi sẽ lặp qua mảng lồng nhau ban đầu và đẩy đệ quy các thành phần được lồng vào một mảng mới.
Ví dụ
const arr = [[1, 2, 3], [4, 5], [6]]; const flatten = function(){ let res = []; for(let i = 0; i < this.length; i++){ if(Array.isArray(this[i])){ res.push(...this[i].flatten()); } else { res.push(this[i]); }; }; return res; }; Array.prototype.flatten = flatten; console.log(arr.flatten());
Phương pháp 2:Sử dụng Arrray.prototype.reduce ()
Ở đây chúng ta sẽ sử dụng phương thức Reduce () để tạo một mảng mới như thế này -
Ví dụ
const arr = [[1, 2, 3], [4, 5], [6]]; const flatten = function(){ return this.reduce((acc, val) => { return acc.concat(...val); }, []); }; Array.prototype.flatten = flatten; console.log(arr.flatten());
Đầu ra
Đầu ra bảng điều khiển cho cả hai phương thức sẽ là -
[ 1, 2, 3, 4, 5, 6 ]