我一直在FreeCodeCamp上完成挑战,偶然发现了该算法的解决方案。无法理解if else语句在这里如何工作。
//before default route
routes.MapRoute(
name: "StoreSearch",
url: "{storeName}",
defaults: new { controller = "Search", action = "Store" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
为什么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 = []
块的末尾?
答案 0 :(得分:6)
temp = []
的意思是“将temp
变量重置为空数组”
在if块中,arr[a]
元素被推入temp
数组的末尾。
在else块中,会发生同样的情况,并且将整个当前temp
数组添加到大型result
数组的末尾,并将temp
数组重置为空数组。
由于您的问题中没有写入数据或上下文,因此无法多说。希望这能回答您的问题。
答案 1 :(得分:2)
好像代码试图将数组分成大小为size
的较小数组的块。假设您有一个装满苹果的大袋子,并且想要将其减少为每个最多容纳2个苹果的较小的苹果袋子。您在现实生活中会如何做?从第一个苹果开始,您将经历所有苹果,并将它们放在一个小袋子里,直到装满为止。然后,您将移动到另一个小袋子并开始填充它。同样的事情在这里完成。
在if
内部,有一个条件检查是否已填充了临时块,如果没有,则继续推送到当前的临时数组。如果是,则创建一个新数组并继续推送到该数组。 temp=[]
确保重置。
答案 2 :(得分:2)
@Peter Pavluchenko发生了。让我们遍历代码,看看它在做什么。
调用方正在指定块的大小。
如果'a'除以大小的结果不等于大小-1,则将项目推到临时数组的末尾。
如果将'a'的结果除以大小等于大小-1,则我们找到了第一个块!因此,让我们将该项添加到我们的temp数组中,并将temp数组添加到我们的结果数组中。
临时数组 -项目1 -项目2
结果数组 -项目 -项目1 -项目2
因此,当您执行result [0]时,您将获得另一个数组。
块=结果[0]; chunk [0] =您可能感兴趣的实际对象。
在将temp数组推到结果数组的末尾之后,我们需要重置它,以便我们可以开始为下一个块收集项目。
最后一个'if'正在寻找类似情况,例如您位于一个块的中间,但是它不是size参数指定的整个块。因此我们在temp数组中有一些对象,我们需要在离开方法之前将其添加到结果数组中。
答案 3 :(得分:2)
看来,任务是将给定的数组(document.querySelectorAll('li.a:not(.b)')
)拆分为一个数组,每个数组的长度为arr
-也许最后一个数组有任何“剩余” “如果size
的长度不是array
的精确倍数。
给定解决方案的工作方式是通过size
,将其元素推入临时数组arr
中。但是每temp
步-这对应于size
循环内的else
条件-for
数组将具有正确的长度(即temp
),因此然后将整个size
数组作为单个元素附加到temp
数组,然后返回为空数组以重新开始。
这样,result
最终将根据需要以大小为result
的块组成。最后的size
语句仅将“剩菜剩饭”添加到-即if
中剩余的任何内容。 (但我们会检查它是否不为空,否则,如果长度是正整数倍,则您在temp
的末尾会有一个无用的空数组。)
答案 4 :(得分:2)
该函数将一个数组分成多个小数组,其中“ size”参数定义每个大块数组的长度。 该算法的工作原理如下:
else块-将元素推入temp数组,将temp数组推入结果数组 并创建新的空临时数组();
最后,如果temp数组长度不为,则将其也推入结果数组。 就是这样:)