我需要编写一个小的map/reduce函数,如果数组中至少有4个连续的0,则应返回1,否则应返回与1不同的其他值。
最后,如果值为4,则至少有4个连续的0。
该算法似乎在运行,但未能满足要求。如果输入有4个连续的0,则需要返回1,否则应返回任何非0数字。
您认为有什么方法可以做到这一点吗?
示例:
[6, 7, 5, 0, 0, 0, 0, 3, 4, 0, 0, 1] => 1
[6, 7, 5, 0, 0, 0, 3, 4,0, 0, 0, 0, 0, 1] => 1
[5, 0, 0, 0, 3, 4, 0, 0, 8, 0, 0, 1] => something # 1
这是我的算法:
[6, 7, 5, 0, 0, 0, 0, 3, 4, 0, 0, 1]
.map((i) => i === 0 ? 1 : 0)
.reduce((prev, i) => {
if (i !== 0) {
return prev + i;
} else {
if (prev >= 4) {
return 4;
}
return 0;
}
}, 0);
.map
方法会将0标记为1,非0标记为0。所以,[6,7,5,0,0,0,0,3,4,0,0,1]
变成了 [0,0,0,1,1,1,1,0,0,1,1,0]
。然后使用.reduce
方法来收集零的数量。
如果当前元素是1(表示输入数组中的0),它会返回前一个值加上当前值(1)。这意味着它代表着零的数量。如果当前项目是0(表示输入数组不为0),则当其小于4时重置prev
为0,否则继续进行。最后,如果值为4,则至少有4个连续的0。
该算法似乎在运行,但未能满足要求。如果输入有4个连续的0,则需要返回1,否则应返回任何非0数字。
您认为有什么方法可以做到这一点吗?
arr.toString().indexOf('0000') > -1
不是更简单吗? - Daniel Lizik