Làm thế nào để bạn làm phẳng một mảng nhiều chiều?

'C' có nghĩa là làm phẳng theo thứ tự hàng lớn (kiểu C). 'F' có nghĩa là làm phẳng theo thứ tự cột lớn (kiểu Fortran). 'A' có nghĩa là làm phẳng theo thứ tự chính của cột nếu a là Fortran liền kề trong bộ nhớ, thứ tự chính của hàng nếu không. 'K' có nghĩa là làm phẳng a theo thứ tự các phần tử xuất hiện trong bộ nhớ. Mặc định là 'C'

Làm phẳng một mảng có nghĩa là giảm một mảng nhiều chiều hoặc mảng lồng nhau (một mảng trong đó một số phần tử chính là mảng) thành một mảng duy nhất với các phần tử theo thứ tự ban đầu. Hai phương thức đầu tiên mà tôi sẽ thảo luận, trải rộng và rút gọn(), hoạt động trên mảng hai chiều, nghĩa là các mảng được lồng vào nhau một cấp. Hai cách thứ hai để xử lý làm phẳng một mảng, sử dụng phẳng() và đệ quy, hoạt động trên các mảng được lồng vào nhau ở mọi cấp độ

Làm phẳng một mảng là một câu hỏi phỏng vấn kỹ thuật cổ điển mà bản thân tôi đã từng gặp khó khăn. Tôi sẽ không bị lừa lần nữa và tôi hy vọng bạn cũng vậy sau khi đọc phần tổng quan đơn giản của tôi

Sử dụng Spread ES6 (hoạt động trên mảng hai chiều)

Chúng tôi sử dụng toán tử trải rộng để trải rộng mảng lồng nhau và nối nó với một mảng trống

Đầu vào mảng 2D. [[3, 2, 1], [4, 6, 5], [], [9, 7, 8]]

Đầu ra mảng 2D. [3, 2, 1, 4, 6, 5, 9, 7, 8]

Sử dụng Giảm (hoạt động trên mảng hai chiều)

Phương thức reduce() giảm một mảng thành một giá trị bằng cách sử dụng hàm gọi lại. Bộ tích lũy là thứ bạn đang xúc tiến, trong trường hợp này là một mảng mới. currentValue là phần tử hiện tại trong mảng. Giá trị ban đầu là giá trị ban đầu được truyền cho hàm và trong trường hợp này, chúng tôi đặt nó thành một mảng trống. Cuộc gọi lại bộ giảm tốc sẽ được thực hiện trên từng phần tử

Cú pháp cơ bản là như thế này. mảng. giảm (gọi lại (bộ tích lũy, giá trị hiện tại), giá trị ban đầu);

Đầu vào mảng 2D. [[3, 2, 1], [4, 6, 5], [], [9, 7, 8]]

Đầu ra mảng 2D. [3, 2, 1, 4, 6, 5, 9, 7, 8]

Sử dụng Flat (hoạt động trên một mảng có độ sâu bất kỳ)

Được giới thiệu kể từ ES2019, flat() trả về một mảng mới là phiên bản phẳng của bản gốc, loại bỏ mọi vị trí trống trong mảng. Nó hoạt động trên hầu hết các trình duyệt hiện đại. Có một đối số tùy chọn được gọi là độ sâu là số cấp độ để làm phẳng mảng. Sử dụng 'Infinity' làm đối số độ sâu có nghĩa là làm phẳng tất cả các mức thành mảng một chiều, cho phép bạn sử dụng phương pháp này trên một mảng có độ sâu bất kỳ không giống như trải rộng và giảm. Tuyệt đấy

Đầu vào mảng 3D. [[3, 2, 1, [3, 4]], [4, 6, 5], [], [9, 7, 8]]

Đầu ra mảng 3D. [3, 2, 1, 3, 4, 4, 6, 5, 9, 7, 8]

Sử dụng Đệ quy (hoạt động trên một mảng có độ sâu bất kỳ)

Đây là cách học cũ để làm phẳng một mảng có độ sâu bất kỳ vốn là mục tiêu trước khi flat() được giới thiệu. Xem giải thích của tôi về giảm ở trên. Phương pháp này sử dụng logic tương tự như lời giải thích đó, nhưng thay vì nối giá trị hiện tại với bộ tích lũy, trước tiên bạn kiểm tra xem giá trị hiện tại có phải là một mảng không. Nếu nó là một mảng, thì hãy gọi hàm đệ quyFlatten của bạn theo cách đệ quy. Nếu nó không phải là một mảng, thì hãy tiếp tục và nối giá trị hiện tại với bộ tích lũy

Psssst. BOOTCAMP PHÁT TRIỂN WEB 2023 sẽ bắt đầu vào ngày 01 THÁNG 2 NĂM 2023. ĐĂNG KÝ HIỆN ĐANG MỞ cho khóa học nhóm 10 tuần này. Tìm hiểu kiến ​​thức cơ bản, HTML, CSS, JS, Tailwind, React, Tiếp theo. jsvà hơn thế nữa. ✨

ES2019 đã giới thiệu hai phương thức mới cho nguyên mẫu Array. flatflatMap. Cả hai đều rất hữu ích cho những gì chúng tôi muốn làm. làm phẳng một mảng

Hãy xem cách chúng hoạt động

Nhưng trước tiên, một lời cảnh báo. chỉ Firefox 62+, Chrome 69+, Edge 76+ và Safari 12+ mới hỗ trợ 2 phương thức đó vì chúng khá mới. Kiểm tra và nhớ rằng bạn có thể sử dụng Babel để nhập mã của mình về phiên bản ES trước đó, nếu bạn cần hỗ trợ các trình duyệt cũ hơn

Nếu bạn không muốn xử lý Babel và bạn chưa có bước xây dựng, thì có thể hợp lý hơn khi sử dụng và các chức năng do Lodash cung cấp

Điều thú vị về Lodash là bạn không cần nhập toàn bộ thư viện. Bạn có thể sử dụng các chức năng đó một cách riêng lẻ bằng các gói đó

Đây là cách làm phẳng một mảng bằng cách sử dụng lodash.flatten

const flatten = require('lodash.flatten')

const animals = ['Dog', ['Sheep', 'Wolf']]

flatten(animals)
//['Dog', 'Sheep', 'Wolf']

Bây giờ chúng ta hãy nói về các phương thức JavaScript gốc

['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]
0 và
['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]
1

['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]
0 là một phương thức thể hiện mảng mới có thể tạo mảng một chiều từ mảng nhiều chiều

Thí dụ

['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]

Theo mặc định, nó chỉ “phẳng” lên một cấp

Bạn có thể thêm một tham số vào

['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]
0 để đặt số mức bạn muốn làm phẳng mảng thành

Đặt nó thành

['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]
4 để có cấp độ không giới hạn

['Dog', ['Sheep', ['Wolf']]].flat()
//[ 'Dog', 'Sheep', [ 'Wolf' ] ]

['Dog', ['Sheep', ['Wolf']]].flat(2)
//[ 'Dog', 'Sheep', 'Wolf' ]

['Dog', ['Sheep', ['Wolf']]].flat(Infinity)
//[ 'Dog', 'Sheep', 'Wolf' ]

Nếu bạn đã quen thuộc với phương thức

['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]
5 của JavaScript trong mảng, thì bạn biết rằng khi sử dụng nó, bạn có thể thực thi một hàm trên mọi phần tử của mảng

Nếu không, hãy xem hướng dẫn JavaScript map() của tôi

['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]
1 là một phương thức nguyên mẫu Array mới kết hợp
['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]
0 với
['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]
5. Nó rất hữu ích khi gọi một hàm trả về một mảng trong hàm gọi lại
['Dog', ['Sheep', 'Wolf']].flat()
//[ 'Dog', 'Sheep', 'Wolf' ]
5, nhưng bạn muốn mảng kết quả của mình bằng phẳng

Làm cách nào để làm phẳng mảng nhiều chiều Java?

Cách tiếp cận. Lấy Mảng ở dạng mảng 2D. Tạo một danh sách trống để thu thập các phần tử được làm phẳng. Với sự trợ giúp của vòng lặp forEach, hãy chuyển từng phần tử của mảng thành luồng và thêm vào danh sách .

Làm cách nào để làm phẳng một mảng nhiều chiều trong PHP?

Làm phẳng mảng hai chiều . array_merge(... $twoDimensionalArray); array_merge lấy danh sách biến của các mảng làm đối số và hợp nhất tất cả chúng thành một mảng. Bằng cách sử dụng toán tử splat (. ), mọi phần tử của mảng hai chiều được chuyển thành đối số cho array_merge.

Làm cách nào để làm phẳng mảng đối tượng lồng nhau trong JavaScript?

phẳng ()” được nhúng trong ES6 cho phép bạn “làm phẳng” một Mảng JavaScript lồng nhau. Phương thức này trả về một mảng mới trong đó tất cả các phần tử của các mảng con được nối theo độ sâu đã chỉ định. Ở đây, đối tượng “Array” sẽ gọi phương thức “flat()” trong khi chuyển “độ sâu” làm đối số