Cách chia mảng thành nhiều phần bằng nhau trong JS

Tôi đã có một vấn đề.

Một mảng chứa rất nhiều mục và tôi muốn chia nó thành nhiều phần.

Tôi đã đưa ra 2 giải pháp hoàn toàn khác nhau.

A) Đầu tiên là chia mảng thành các phần bằng nhau, ví dụ như các phần gồm 2 hoặc 3 mục B) Cách thứ hai là tạo n phần và thêm một tập hợp các biến bằng nhau vào nó

Nó khác nhau như thế nào và tại sao chúng ta phân chia. Giải pháp (A) là tuyệt vời khi bạn không biết mình sẽ kết thúc với bao nhiêu nhóm và không quan tâm, nhưng bạn biết bạn muốn X mục trong mỗi mảng mới mà bạn tạo

Giải pháp (B) là tuyệt vời khi bạn biết bạn muốn tạo bao nhiêu nhóm và bạn nghiêm túc về điều đó, nhưng không quan tâm mỗi mảng mới sẽ chứa bao nhiêu mục.

Nói cách khác, với một mảng như

[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Với giải pháp (A), chúng ta có thể tạo các phần gồm 2 mục và nhận được

[ 1, 2 ]
[ 3, 4 ]
[ 5, 6 ]
[ 7, 8 ]
[ 9, 10 ]

or chunks of 3 items:

[ 1, 2, 3 ]
[ 4, 5, 6 ]
[ 7, 8, 9 ]
[ 10 ]

With solution (B) we can divide the array in 2 arrays, and get:

[ 1, 2, 3, 4, 5 ]
[ 6, 7, 8, 9, 10 ]

Or we can divide the array in 3 arrays, and get:

[ 1, 2, 3, 4 ]
[ 4, 5, 6, 7]
[ 8, 9, 10 ]

Here is the implementation of (A):

const items = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] //… your array, filled with values
const n = 3 //tweak this to add more items per line

const result = new Array(Math.ceil(items.length / n))
  .fill()
  .map(_ => items.splice(0, n))

In this example result is a new array of arrays:

[ 
  [ 1, 2, 3 ], 
  [ 4, 5, 6 ], 
  [ 7, 8, 9 ], 
  [ 10 ] 
]

Here is the implementation of (B), assuming you want an array of 3 arrays as a result:

const items = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] //… your array, filled with values

const n = 3
const result = [[], [], []] //we create it, then we'll fill it

const wordsPerLine = Math.ceil(items.length / 3)

for (let line = 0; line < n; line++) { for (let i = 0; i < wordsPerLine; i++) { const value = items[i + line * wordsPerLine] if (!value) continue //avoid adding “undefined” values result[line].push(value) } }

In this example result is

[ 
  [ 1, 2, 3, 4 ], 
  [ 5, 6, 7, 8 ], 
  [ 9, 10 ] 
]  

More js tutorials: