/

如何在JS中將數組分成多個相等部分

如何在JS中將數組分成多個相等部分

我遇到了一個問題。

一個數組包含了很多項目,我想將它分成多個部分。

我想出了兩種完全不同的解決方案。

A)第一種是將數組平均分成多個部分,例如每個部分有2或3個項目
B)第二種是創建n個部分並為其添加相等的變量集合項目

不同的是我們分割的方法和原因。解決方案(A)在你不知道最後會得到多少組時很好用,而且你並不關心,但你知道你想要每個新數組中有X個項目。

解決方案(B)在你知道你想要創建多少組並且對此要求嚴格時很好用,但你並不關心每個新數組的項目數量。

換句話說,對於一個數組

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

使用方案(A),我們可以創建2個項目的部分,得到

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

或者3個項目的部分:

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

使用方案(B),我們可以將數組分成2個部分,得到:

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

或者分成3個部分,得到:

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

這是方案(A)的實現:

1
2
3
4
5
6
const items = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] //… 你的數組,填充了值
const n = 3 //調整此值以增加每行的項目數

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

在這個例子中,result是一個新的數組的數組:

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

注意,使用splice()方法會修改原始數組。

這是方案(B)的實現,假設你想要一個包含3個數組的數組作為結果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const items = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] //… 你的數組,填充了值

const n = 3
const result = [[], [], []] //我們創建一個數組,然後填充它

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 //避免添加“undefined”值
result[line].push(value)
}
}

在這個例子中,result是:

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

tags: [“JavaScript”, “array division”, “chunking”]