零数组问题 -- 弄清楚解决方案的工作原理

Zero Array Questions -- Figuring Out How a Solution Works

提问人:Jeffrey Ti 提问时间:3/4/2023 更新时间:3/4/2023 访问量:91

问:

https://www.codewars.com/kata/59e270da7997cba3d3000041/javascript

描述: 如果一个数组包含多个零,并且每个零序列的长度至少为 4 个项目,则该数组称为零丰度。

您的任务是,如果给定的数组为零,则返回零个序列的数量,即 0。

例子 [0, 0, 0, 0, 0, 1] --> 1

1 组 5 个零 (>= 4),因此结果是 1

[0, 0, 0, 0, 1, 0, 0, 0, 0] --> 2

2 组 4 个零 (>= 4),因此结果是 2

[0, 0, 0, 0, 1, 0] --> 0 1 组 4 个零和 1 组 1 个零 (< 4) 每个零序列必须至少为 4 个长度,因此结果为 0

[0, 0, 0, 1, 0, 0] --> 0 1 组 3 个零 (< 4) 和 1 组 2 个零 (< 4)

[1, 2, 3, 4, 5] --> 0 没有零

[] --> 0 没有零

function zeroPlentiful(arr) {
  let counter = [];
  let index = 0;
  arr.forEach((num, idx) => {
   if (num === 0) {
     counter[index] = counter[index] ? counter[index] + 1 : 1;
   } else {
     index = counter.length;
   } 
  });
  return counter.every(item => item >= 4) ? counter.length : 0;
}

有人可以给我一个关于这段代码中发生的事情的逐个播放吗?我已经尝试过这个问题很多次并查看了所有解决方案,但我仍然无法弄清楚发生了什么。我知道 forEach 正在寻找 0 和非 0 数字,但除此之外,我不确定发生了什么。

JavaScript 数组 序列

评论

0赞 PM 77-1 3/4/2023
stackoverflow.com/questions/62008816/......

答:

0赞 PedroSantana 3/4/2023 #1

代码实际上很简单,两个主要变量是 和 ,计数器跟踪数组中的零个数。然后,它遍历数组,并验证当前位置是否为零,如果是,则递增 的 in 位置。counterindexcounterindex

因此,对于第一个数组,将是 ,因为序列中有 5 个零,并且 index 没有从其原始值递增。[0,0,0,0,0,1]counter[index]5

如果该值不是 0,那么它不会在 上增加任何东西,而是递增,因为 0 的序列被打破了,现在计数器从一个新的位置开始。counterindex

基本上,它创建一个数组,其中包含每个序列中的零个数,然后该语句只需运行 every 函数,并验证该序列是否为 4 或更多。return

评论

1赞 Jeffrey Ti 3/4/2023
谢谢佩德罗!这更有意义