كيفية تقسيم المصفوفة إلى عدة أجزاء متساوية في JS

لدي مشكلة.

تحتوي المصفوفة على الكثير من العناصر ، وأردت تقسيمها إلى أجزاء متعددة.

لقد توصلت إلى حلين مختلفين تمامًا.

أ) الأول كان تقسيم المصفوفة إلى أجزاء متساوية ، على سبيل المثال قطع من 2 أو 3 عناصر ب) والثاني هو إنشاء عدد n من الأجزاء وإضافة مجموعة متغيرة متساوية من العناصر إليها

يختلف كيف ولماذا نقسم. يكون الحل (أ) رائعًا عندما لا تعرف عدد المجموعات التي ستنتهي بها ، ولا تهتم ، لكنك تعلم أنك تريد عناصر X في كل مجموعة جديدة تقوم بإنشائها

الحل (ب) رائع عندما تعرف عدد المجموعات التي تريد إنشاءها ، وأنت صارم بشأن ذلك ، لكن لا تهتم بعدد العناصر التي ستحتويها كل مصفوفة جديدة.

بمعنى آخر ، مع مصفوفة مثل

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

باستخدام الحل (أ) ، يمكننا إنشاء أجزاء من عنصرين ، والحصول على

[ 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: