Problem
Given array:
const items = [0, 1, 1];
How can you identify if there are N items in a row?
Solution
To identify if there are 2 items in a row, iterate through the items and keep a count:
const N = 2;
let previous;
let count;
for (const item of items) {
if (item === previous) {
count++;
} else {
count = 1;
previous = item;
}
if (count === N) {
console.log(item);
break;
}
}
findNInARow
A function to return the array item if it repeats N times in a row:
/**
* Find N in a row.
*
* @param {number} N
* @param {any[]} items
* @return {any}
*/
function findNInARow(N, items) {
if (N < 1) {
return;
}
if (items.length === 0) {
return;
}
let previous = Symbol();
let count = 0;
for (const item of items) {
if (item === previous) {
count += 1;
} else {
count = 1;
previous = item;
}
if (count === N) {
return item;
}
}
return;
}
Symbol()
is used to generate a unique identifier since there’s no previous item when the loop first begins.
hasNInARow
A function to check if array has N items in a row:
/**
* Has N in a row.
*
* @param {number} n
* @param {any[]} items
* @return {boolean}
*/
function hasNInARow(N, items) {
if (N < 1) {
return true;
}
if (items.length === 0) {
return false;
}
let previous = Symbol();
let count = 0;
for (const item of items) {
if (item === previous) {
count += 1;
} else {
count = 1;
previous = item;
}
if (count === N) {
return true;
}
}
return false;
}