10 KiB
10 KiB
title | localeTitle |
---|---|
Chunky Monkey | 矮胖的猴子 |
如果卡住,请记得使用**Read-Search-Ask
** 。尝试配对程序并编写自己的代码
问题说明:
我们对此算法的目标是将arr
(第一个参数)拆分为较小的数组块,其长度由size
(第二个参数)提供。我们的代码需要传递4个绿色检查(目标)才能完成此算法:
(['a', 'b', 'c', 'd'], 2)
预期为[['a', 'b'], ['c', 'd']]
([0, 1, 2, 3, 4, 5], 3)
预计[[0, 1, 2], [3, 4, 5]]
([0, 1, 2, 3, 4, 5], 2)
预计[[0, 1], [2, 3], [4, 5]]
([0, 1, 2, 3, 4, 5], 4)
预计[[0, 1, 2, 3], [4, 5]]
相关链接
提示:1
上面的链接建议使用Array.push()
,所以让我们首先创建一个新的数组来存储我们很快会有这样的小数组:
var newArray = [];
现在尝试解决问题
提示:2
接下来我们需要一个for loop
来遍历arr
。
现在尝试解决问题
提示:3
最后,我们需要一个方法来进行实际的拆分,我们可以使用Array.slice()
来做到这一点。这个算法的关键是理解for loop
, size
, Array.slice()
和Array.push()
是如何一起工作的。
现在尝试解决问题
扰流警报!
提前解决!
基本代码解决方案
function chunkArrayInGroups(arr, size) {
var temp = [];
var result = [];
for (var a = 0; a < arr.length; a++) {
if (a % size !== size - 1)
temp.push(arr[a]);
else {
temp.push(arr[a]);
result.push(temp);
temp = [];
}
}
if (temp.length !== 0)
result.push(temp);
return result;
}
代码说明:
- 首先,我们创建了两个名为
temp
和result
空数组,我们最终会返回它们。 - 我们的for循环循环直到
a
等于或大于我们测试中数组的长度。 - 在我们的循环中,我们使用
temp.push(arr[a]);
推送到temp
temp.push(arr[a]);
如果a / size
的余数不等于size - 1
。 - 否则,我们推送到
temp
,将temp
推送到result
变量并将temp
重置为空数组。 - 接下来,如果
temp
不是空数组,我们将其推送到result
。 - 最后,我们返回
result
的值。
相关链接
中级代码解决方案:
function chunkArrayInGroups(arr, size) {
// Break it up.
var arr2 = [];
for (var i = 0; i < arr.length; i+=size) {
arr2.push(arr.slice(i , i+size));
}
return arr2;
}
代码说明:
- 首先,我们创建一个空数组
arr2
,我们将存储'chunk'。 - for循环从零开始,每次循环都按
size
递增,并在达到arr.length
时停止。 - 请注意,此for循环不会循环遍历
arr
。相反,我们使用循环生成数字,我们可以将其用作索引,以在正确的位置切割数组。 - 在我们的循环中,我们使用
arr.slice(i, i+size)
创建每个块,并使用arr2.push()
将此值添加到arr2
。 - 最后,我们返回
arr2
的值。
相关链接
高级代码解决方案
function chunkArrayInGroups(arr, size) {
// Break it up.
var newArr = [];
var i = 0;
while (i < arr.length) {
newArr.push(arr.slice(i, i+size));
i += size;
}
return newArr;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
代码说明:
-
首先,我们创建两个变量。
newArr
是一个空数组,我们将推送到。我们还将i
变量设置为零,以便在我们的while循环中使用。 -
我们的while循环循环,直到
i
等于或大于我们测试中数组的长度。 -
在我们的循环中,我们使用
arr.slice(i, i+size)
推送到newArr
数组。它第一次循环,它看起来像:newArr.push(arr.slice(1,1 + 2))
-
在我们推送到
newArr
,我们将size
的变量添加到i
。 -
最后,我们返回
newArr
的值。
相关链接
高级代码解决方案2:
function chunkArrayInGroups(arr, size) {
var newArr = [];
while (arr.length) {
newArr.push(arr.splice(0,size));
}
return newArr;
}
代码说明:
- 首先,我们创建一个变量。
newArr
是一个空数组,我们将推送到。 - 我们的
while
循环循环,直到我们测试中数组的长度不为0。 - 在我们的循环中,我们使用
arr.splice(0, size)
推送到newArr
数组。 - 对于
while
循环的每次迭代,它会从arr
前面删除元素的size
数量,并将它们作为数组推送到newArr
。 - 最后,我们返回
newArr
的值。
相关链接
高级代码解决方案3:
function chunkArrayInGroups(arr, size) {
if (arr.length <= size){
return [arr];
}
else {
return [arr.slice(0,size)].concat(chunkArrayInGroups(arr.slice(size),size));
}
}
代码说明:
- 嵌套返回小于size的数组。
- 对于任何大于大小的数组,它都被分成两部分。第一个段嵌套并与第二个第二段连接,进行递归调用。
相关链接
捐款说明:
- 请勿添加与任何现有解决方案类似的解决方案。如果您认为它**相似但更好** ,那么尝试合并(或替换)现有的类似解决方案。
- 添加解决方案的说明。
- 将解决方案分为以下类别之一 - 基本 , 中级和高级 。
- 如果您添加了任何**相关的主要内容,**请仅添加您的用户名。 ( 不要 删除任何现有的用户名 )