函数内部的if-else语句如何工作?

时间:2018-09-28 14:04:41

标签: javascript

我一直在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 = []块的末尾?

5 个答案:

答案 0 :(得分:6)

temp = []的意思是“将temp变量重置为空数组”


在if块中,arr[a]元素被推入temp数组的末尾。

在else块中,会发生同样的情况,并且将整个当前temp数组添加到大型result数组的末尾,并将temp数组重置为空数组。

由于您的问题中没有写入数据或上下文,因此无法多说。希望这能回答您的问题。

答案 1 :(得分:2)

好像代码试图将数组分成大小为size的较小数组的块。假设您有一个装满苹果的大袋子,并且想要将其减少为每个最多容纳2个苹果的较小的苹果袋子。您在现实生活中会如何做?从第一个苹果开始,您将经历所有苹果,并将它们放在一个小袋子里,直到装满为止。然后,您将移动到另一个小袋子并开始填充它。同样的事情在这里完成。

if内部,有一个条件检查是否已填充了临时块,如果没有,则继续推送到当前的临时数组。如果是,则创建一个新数组并继续推送到该数组。 temp=[]确保重置。

答案 2 :(得分:2)

@Peter Pavluchenko发生了。让我们遍历代码,看看它在做什么。

调用方正在指定块的大小。

  • %大小!==大小-1
    • %是mod运算符。那么,将a除以大小会得到什么结果?结果不等于-1吗?

如果'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”参数定义每个大块数组的长度。 该算法的工作原理如下:

  • 迭代每个数组元素(用于循环),直到main_array elements索引 小于块数组大小(%size!== size-1),并将元素压入 临时数组。
  • else块-将元素推入temp数组,将temp数组推入结果数组 并创建新的空临时数组();

    最后,如果temp数组长度不为

    ,则将其也推入结果数组。 就是这样:)